SSDTにデータベースプロジェクトがあり、別のデータベースのオブジェクトを参照するビューをインポートすると、エラーSQL71561が表示され、次の行に説明が表示されます。
エラー4 SQL71561:ビュー:[スキーマ]。[ビュー名]には、オブジェクト[other_db]。[スキーマ]。[テーブル]。[列]への未解決の参照があります
私はこれを理解するためにしばらく時間を費やしたので、他の人がこれに遭遇するのを助けるために、私にとってうまくいった答えを投稿します。
これを解決するために、他のデータベースへの参照を追加し、ダイアログの[データベース変数]フィールドをクリアしました。このフィールドをクリアしなかった場合、スキーマ比較を実行すると、SSDTはデータベース変数名を使用して更新スクリプトを生成し、失敗しました。
「使用例」のテキストを見て、期待どおりに見えることを確認します。 [OK]をクリックして参照を追加すると、「未解決の参照」エラーが処理されます。
これを実行した後、スキーマの比較を行うことができましたが、プロジェクトをビルドしようとすると、次のエラーが発生しました。
エラー408 SQL00208:無効なオブジェクト名 'db.schema.table'。
プロジェクトのプロパティに移動し、[共通オブジェクトの拡張Transact-SQL検証を有効にする]チェックボックスをオフにすると、プロジェクトを正常にビルドできました。
私の問題は見方によるものでした。私が見た中で...
...FROM [MyDatabase].[dbo].[MyTable]
交換しました...
...FROM [MyTable]
その理由は、bacpac/dacpacを別のデータベース名にインポートする可能性があるため、[MyDatabase]への参照が無効になる可能性があるためです。
上記の4つの答えをすべて試した後も、2つのストアドプロシージャで同じエラーが発生していました(1000以上のエラーから2つまで)。
つまり、現在機能しているのは、テーブルエイリアス名をテーブル名自体に置き換えるだけで、ビルドが成功したことです。
--From
table1 t1 join table2 t2
t1.col1 = t2.col1
--To
table1 t1 join table2 t2
table1.col1 = t2.col1
プロジェクトプロパティ>ターゲットプラットフォームをSQL Server 2016からSQL Server 2014に変更すると、これらのエラーが表示され始めました。
私のシナリオでは、1つのSSDTプロジェクト(A)の外部ツールによって作成されたデータベースと、別のプロジェクト(B)のSQLビューなどに、B-> Aからの参照が含まれています。
SQL 2016に対して開発したところ、テスト環境が2014を実行していることがわかりました。そのため、(B)でターゲットプラットフォームを変更し、展開できるようにしました。 (A)はデプロイされていません-外部データベースもインストールされ、同じデータベースを作成するように構成されています。
奇妙なことに、後で(B)でビューを変更して公開することができましたが、その後、列を削除したいと考えました。この時点で、これらの参照エラーのためにパブリッシュが失敗し続けました。プロジェクト(A)のターゲットプラットフォームを2014に変更すると、エラーがクリアされ、続行できるようになりました。
ビルド順序が正しくない場合、これに遭遇する可能性があります。
ソース管理からプロジェクトの新しいコピーをプルして「ビルドソリューション」を実行しているときに、この問題に遭遇しました。
参照が機能しない場合は、参照されるデータベース[other_db]を構築してください。 [other_db]を構築すると、参照が機能しました。