既存の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'
これを解決して、ソリューション内のすべてのデータベースプロジェクトを新しいインスタンスに公開できるようにするにはどうすればよいですか?
次の手順を実行することで、ソリューション内のすべてのデータベースを公開できるようになりました。
Project Properties > Debug
の下に設定します。Solution Properties
で複数のスタートアッププロジェクトを割り当てるこれは、別のサーバーに公開する場合、すべてのプロジェクトを変更する必要があることを意味するため、これを実現する正しい方法であるとは思われませんが。
私は数年前に同様の問題を抱えていましたが、以前は意味がなく分割されていたため、giveデータベースを異なるスキーマの単一のデータベースにまとめることで、これらの依存関係を解決することになりました。だから私はこれを修正し、それによってすべてのオブジェクトのsqlコードを処理できるようになりました。ちなみに、同じアプリケーションで使用されており、1つのデータベースプロジェクトとしてロットまたは参照がありました。
または、プロジェクト間の参照が許可される方向を再考し、それらを再編成します。
別のオプションは、DBの境界を越えて他のオブジェクトを参照するスクリプトをビルドプロセスから除外することです。
また、何が不思議に思います:あなたが言ったようにすべての循環参照を解決し、現在複合プロジェクトがある場合、そのプロジェクトを1つのデータベースに今デプロイする必要はありませんか? Afaik複合プロジェクトは、すべてのオブジェクトを単一のデータベースに結合します。その場合、プロジェクト内のすべてのデータベース名/使用法でデータベースSQLCMD変数を使用していないと思います。コードは次のようになります。
select * from [$(DatabaseDB1)].dbo.TableName