SQL Serverデータベースプロジェクトのソース管理下にある既存のデータベースがあり、これらのデータベースの多くは相互に参照しています。
これらをプロジェクトとソース管理に組み込むことは十分に困難でしたが、新しいSQLサーバーインスタンスを使用せずに開発/テスト環境をセットアップするのは難しいと感じています。
現時点では、継続的デプロイの一部として使用されているテストSQLインスタンスにデータベースのコピーがあります。私が探しているのは、ブランチで開発し、同じインスタンス上のDevプレフィックスを持つデータベースに対して作業することですが、これらは継続的デプロイに使用されるデータベースを参照していることを認識しています。
これは、名前だけでなくデータベース参照でデータベース変数を使用することで可能でしょうか?そうであれば、プロジェクト間でSQLCMD変数を共有する方法と方法はありますか?検討する別の方法はありますか?
ここで説明するように、複数のpublish.xmlファイルを使用することをお勧めします Jamie Thompsonブログ
データベース名(またはプレフィックス)は、SQLCMD変数として格納できます。
次に、各公開ファイルがビルドされ、ビルドアーティファクトとして公開されます。サーバー名に基づいて正しいファイルを選択するには、カスタムのPowerShellまたはバッチジョブをコーディングする必要があります。 (ここではサーバー名をスイッチとして使用できます)
環境ごとに公開ファイルを一度設定する必要がありますが、その作業が完了すると、再度行う必要はありません。
以前の人生では、各環境の異なるサーバー上で、いくつかの制御データベースとともに、大量の同一のデータベースを使用してかなり大規模な実装を管理していました。開発、QA、テスト、本番前、本番など、同じように機能する必要のあるデータベース間クエリがたくさんありました。私のソリューションは、すべてのサーバーとデータベース間の参照を更新するスクリプトではなく、同義語を使用することでした。
Devでは、すべてが1つのサーバー上にありました。
CREATE SYNONYM dbo.ControlTable FOR ControlDB.dbo.ControlTable;
QAでは、制御テーブルが別のサーバー上にありました。
CREATE SYNONYM dbo.ControlTable FOR ControlServerQA.ControlDB.dbo.ControlTable;
これで、制御テーブルを必要とするいずれかの環境のデータベース内のすべてのコードがdbo.ControlTable
を参照するだけで、自動同期/デプロイからシノニムを除外しました(シノニムが実際に変更された場合を除く)。
そのテーブルを別のデータベースに移動したり、別の名前のデータベースを使用したり、そのデータベースを別のサーバーに移動したりした場合、コードに触れる必要はありませんでした。シノニムを削除して再作成しただけです。
あなたの場合、devプロジェクト/ devデータベースの同義語は次のようになります。
CREATE SYNONYM dbo.tTableName FOR DevPrefixDB.SchemaName.TableName;
そして、本番データベースでは:
CREATE SYNONYM dbo.tTableName FOR DefaultDbName.SchemaName.TableName;
シノニム名をオブジェクト名と同じ名前にしたい場合は、シノニムを独自のスキーマに配置できます。
CREATE SCHEMA syn;
GO
CREATE SYNONYM syn.TableName FOR DefaultDbName.SchemaName.TableName;
また、dev dbでは、次のようになります。
CREATE SCHEMA syn;
GO
CREATE SYNONYM syn.TableName FOR DevPrefixDB.SchemaName.TableName;
(これで、同義語(またはそのスキーマ)をプロジェクトとは別に展開可能なものとして保持し、ワイヤーの交差を回避します。)
ここで同義語についてブログを書きました。これらは非常に便利ですが、十分に活用されていない機能です。