web-dev-qa-db-ja.com

SSDTは、複数の参照データベースプロジェクトを新しいインスタンスに公開します

既存のSQL Serverデータベースをバージョン管理下に置くことを目的として、Visual Studio 2015のSQL Serverデータツールにインポートするプロセスを進めています。

循環参照を持つデータベースを複合プロジェクトに分割した後、私のソリューションのすべてのデータベースプロジェクトは正しくビルドされます。私の問題は、それらすべてを新しいインスタンスにデプロイしようとしていることです。参照されているデータベースが存在しないため、公開は失敗しています。

SQL72014:.Net SqlClientデータプロバイダー:メッセージ208、レベル16、状態1、プロシージャFoo、行13無効なオブジェクト名 'DB1.dbo.Bar'。

DB1をデプロイしようとすると、それはまだ作成されていない別のデータベースを参照することと同じです

SQL72014:.Net SqlClientデータプロバイダー:メッセージ208、レベル16、状態1、プロシージャバー、行64無効なオブジェクト名 'DB2.dbo.Foo'

これを解決して、ソリューション内のすべてのデータベースプロジェクトを新しいインスタンスに公開できるようにするにはどうすればよいですか?

1
mheptinstall

次の手順を実行することで、ソリューション内のすべてのデータベースを公開できるようになりました。

  • ソリューションの各プロジェクトの正しい接続文字列と公開オプションをProject Properties > Debugの下に設定します。
  • Solution Propertiesで複数のスタートアッププロジェクトを割り当てる
  • ソリューションをデバッグすると、すべてのデータベースが正しい順序で構築/展開されます

これは、別のサーバーに公開する場合、すべてのプロジェクトを変更する必要があることを意味するため、これを実現する正しい方法であるとは思われませんが。

1
mheptinstall

私は数年前に同様の問題を抱えていましたが、以前は意味がなく分割されていたため、giveデータベースを異なるスキーマの単一のデータベースにまとめることで、これらの依存関係を解決することになりました。だから私はこれを修正し、それによってすべてのオブジェクトのsqlコードを処理できるようになりました。ちなみに、同じアプリケーションで使用されており、1つのデータベースプロジェクトとしてロットまたは参照がありました。

または、プロジェクト間の参照が許可される方向を再考し、それらを再編成します。

別のオプションは、DBの境界を越えて他のオブジェクトを参照するスクリプトをビルドプロセスから除外することです。

また、何が不思議に思います:あなたが言ったようにすべての循環参照を解決し、現在複合プロジェクトがある場合、そのプロジェクトを1つのデータベースに今デプロイする必要はありませんか? Afaik複合プロジェクトは、すべてのオブジェクトを単一のデータベースに結合します。その場合、プロジェクト内のすべてのデータベース名/使用法でデータベースSQLCMD変数を使用していないと思います。コードは次のようになります。

select * from [$(DatabaseDB1)].dbo.TableName
1
Magier