13

Visual Studio 2010 データベース プロジェクトに基づく SQL Azure データベースを管理するための最善のアプローチに本当に苦労しています。VSDBCMD を使用してアップグレード用の diff スクリプトを作成し、SSMS で SQL Azure に対して実行するのは簡単だと思いました。ただし、「ターゲット データベース スキーマ プロバイダーを特定できませんでした。展開を続行できません」という恐ろしいメッセージが表示されます。エラー。

現時点では、SQL Azure が VSDBCMD で何かをサポートしていないか、またはその逆のいずれかを想定しており、他のアプローチを検討しています。私が現在考えているアプローチは次のとおりです。

  1. Azure データベース エンジン設定を使用して、SSMS から SQL Azure データベースのスクリプトを作成します。
  2. 手順 1 のスクリプトから一時的なローカル データベースを作成します。
  3. VSDBCMD を使用して、ステップ 2 のローカル データベースに対してデルタ スクリプトを作成します。
  4. 手順 3 のスクリプトを確認/変更します。
  5. SSMS で SQL Azure に対して手順 3/4 のスクリプトを実行します。

良し悪し?他のアイデアはありますか?

編集: 今日、Visual Studio 2010 SP1 に更新したところ、Microsoft.Data.Schema.Sql.dll に新しいデータベース スキーマ プロバイダーである SqlAzureDatabaseSchemaProvider があることがわかりました。しかし、この不良少年を実際にどのように使用するかは判断できません。Azure データベースに対して同じ VSDBCMD スクリプトを実行すると、次のようになります。

ソース データベース スキーマ プロバイダー Sql100DatabaseSchemaProvider をプロバイダー SqlAzureDatabaseSchemaProvider に変換できませんでした。展開を続行できません。

また、同じ結果で Sql90 プロバイダーを使用してみました。手動で dbproj ファイルを編集し、DSP プロパティを SqlAzureDatabaseSchemaProvider に変更しました。プロジェクトをリロードすると、次のようになります。

データベース スキーマ プロバイダーは、DataGenerationServices の実装を提供する必要があります。

VS 2010 SP1 でこれを試した人はいますか?

4

3 に答える 3

3

SQL Azure Migration Wizardを使用して操作できます。たぶん、スクリプトを取得して、必要に応じて編集できます。ただのアイデア。

于 2011-03-24T09:21:54.713 に答える
1

データベース プロジェクトのプロパティ ページを確認します。プロジェクトで利用可能なさまざまなプロバイダーを含むドロップダウンが表示されます。Azure プロバイダーを選択すると、プロジェクトを Azure アプリケーションの一部としてデプロイできるはずです。

于 2011-03-24T15:35:03.357 に答える
1

必要なのは、無効な SQL Azure ステートメントを置き換える単純なコマンド ライン ツールだけです。

    private const string STARTPLACEHOLDER = "AZURESCRIPTSTARTPLACEHOLDER";

    public static void Do(string fileName)
    {
        // Read the original file
        StringBuilder script = new StringBuilder();
        using (StreamReader reader = new StreamReader(fileName))
        {
            script.Append(reader.ReadToEnd());
        }

        // Remove everything before the start placeholder
        int startPlaceHolder = script.ToString().IndexOf(STARTPLACEHOLDER, 0);
        if (startPlaceHolder > 0)
        {
            script.Remove(0, startPlaceHolder + STARTPLACEHOLDER.Length);
        }

        // Remove WITH clause
        script.Replace("WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF)", string.Empty);

        // Create azure compatible output file
        using (StreamWriter writer = new StreamWriter(Path.Combine(Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName) + "_Azure" + Path.GetExtension(fileName))))
        {
            writer.Write(script.ToString());
        }
    }
于 2011-05-05T04:30:49.007 に答える