1

プロジェクトで Azure SQL DB とフェデレーションを使用しており、SQL スクリプトをソリューションに保持したいと考えています。federation キーワードを使用して SQL コードを編集しようとするまで、問題は発生しませんでした。db プロジェクトを azure フェデレーションと統合できないことがわかりました。そして、それは問題です。ソリューションにdbスキーマを保持したいだけですが、txtファイルだけが含まれているのではなく、適切に保持したいだけです。

何かご意見は?

4

2 に答える 2

2

1 年以上前のブログ記事http://blogs.msdn.com/b/ssdt/archive/2012/01/06/ssdt-does-not-support-sql-azure-federations.aspxで SQL Server について説明しています。フェデレーションをサポートしていないデータ ツール。

あなたの質問に正確に答えるわけではありませんが、VS 2012 で SQL Server データベース プロジェクトを作成することになりました。

ここに画像の説明を入力

連合テーブルは Database.Federated プロジェクトにあります。各テーブルには独自の .table.sql ファイルがありますが、そのファイルに FEDERATED ON (cid=CustomerId) を入れません。

代わりに、別の単一の SQL ファイル (CreateFederatedTables.sql) があり、すべてのテーブルが FEDERATED ON (cid=CustomerId) で定義されており、Sql Azure で CreateFederatedTables.sql を手動で実行しましたが、「発行」オプションを使用して発行することができます。テスト用のローカル SQL。

「拡張 Transact-SQL 検証」を無効にしたので、コンパイラは文句を言いません。

いくつかの重複がありますが、それを処理する別の方法は考えられません。

于 2013-11-07T21:22:10.470 に答える
1

別のアプローチを提供したかった。pateketu が指摘したように、SSDT は現在これをサポートしていませんが、SSDT はフェデレーション環境で非常に有用であり、VS でデータベース プロジェクトを作成および維持する価値があることがわかりました。

まず、ルート データベースと各フェデレーションに対して個別の db プロジェクトを維持します。もちろん、ルート データベースのプロジェクトは、これまでに使用した他のプロジェクトと同様であるため、説明は不要です。

各フェデレーション プロジェクトには、フェデレーション テーブル、参照テーブル、ストアド プロシージャ、およびフェデレーションで必要なその他のオブジェクトがすべて含まれています。覚えておくべき重要な部分は、すべてのフェデレーション テーブルは、SSDT から発行するのではなく、フェデレーションで最初に手動で作成する必要があるということです (もちろん、これは実行できません)。各テーブル スクリプトを FEDERATED ON 句と共にコピー アンド ペーストするだけで、これを非常に簡単に行うことができます。(スクリプトを実行する前に句を追加することも、先に進んで SSDT のスクリプトに含めることもできます。問題を報告したり削除したりすることはありません。公開しようとすると、それらが削除されるだけです。)

連合テーブルが作成されると、それらは他のすべてのオブジェクト タイプとともに維持 (変更) でき、各連合メンバー データベースに直接接続することで変更を比較および公開できます。データベースにはランダムな名前が付けられていますが、Azure portal は、どのデータベースがどのフェデレーションに属しているかを判断するのに役立ちます。

アプリでフェデレーション ロジックをテストし、パフォーマンス テストを行う場合を除いて、通常はフェデレーションごとに 1 つのメンバーしか持たないため、開発中はこれはすべて非常に扱いやすいものです。しかし、通常は連合をテストした後、1 つのメンバーに戻します。

実稼働環境に対して作業を行っている場合でも、非常に便利です。フェデレーション メンバーのいずれかのターゲットに対してスキーマを比較します。発行する代わりに、発行スクリプトを生成するだけです。上部のすべての SQLCMD を削除し (おそらく USE [$(DatabaseName)] コマンドまでのすべてになります)、FEDERATED ON 句を連合テーブルの CREATE TABLE コマンドに追加します (これは、次の場合にのみ存在します)。フェデレーション テーブルを追加した)、基本的なスキーマ更新スクリプトが作成されました。次に、そのスクリプトの内容全体をメンバーごとに 1 回コピーして貼り付け、各コピーの前にそのメンバーに適した USE FEDERATION コマンドを追加します。これで、本番データベースに対して実行できるスクリプトが作成されました。(できれば、本番データベースのスキーマをミラーリングする別の開発データベースを用意してください。これは、いつものように最初にテストできます。) これにより、メンバーの数と数に応じて、すべてのメンバーのスキーマがかなり短時間で更新されます。あなたの変化がどれほど極端か。本番環境でフェデレーション スキーマの変更に使用する他の方法と同様に、一定期間同期がずれてエラーが発生しないという保証はありません。いつものように、アプリには再試行ロジックを含める必要があります。一定期間同期がとれず、エラーが発生します。いつものように、アプリには再試行ロジックを含める必要があります。一定期間同期がとれず、エラーが発生します。いつものように、アプリには再試行ロジックを含める必要があります。

明らかに、これは SSDT がフェデレーションをサポートした場合ほどスムーズではありません。これに遭遇する可能性のある他の人のために私が試みたポイントは、フェデレーションを使用している場合でも、SSDT には、作成しようとする代替手段と比較して、スキーマ開発と更新スクリプトの生成に関して提供することがまだたくさんあるということです。手動でスキーマ更新スクリプトを維持します。

(VS 2013 に付属の SSDT を使用していることに注意してください。VS 2012 で利用可能な SSDT について、私が言ったことすべてが真実であることを確認することはできません。)

于 2014-02-09T01:01:29.497 に答える