2つのデータベースプロジェクトを持つVS 2013ソリューションがあります。
その1つを、「ワーカー」が約10の異なる実動サーバーにデプロイされることになっていると呼びましょう。
もう1つは、「コントローラー」インスタンスとして機能することになっていますが、基本的には10個の本番サーバー上の「ワーカー」データベースでさまざまなストアドプロシージャを実行することになっています。
これを実現するために、「コントローラー」内の10個のリンクサーバーオブジェクトをスクリプト化し、「ワーカー」データベースのさまざまなSPを呼び出しました。
リンクサーバースクリプトのサンプルを次に示します。
EXEC sp_addlinkedserver @server = N'PROD1', @srvproduct=N'SQLSERVER', @provider=N'SQLNCLI', @datasrc=N'1.2.3.4\prod1'
GO
EXEC sp_addlinkedsrvlogin @rmtsrvname=N'PROD1',@useself=N'False',@locallogin=NULL,@rmtuser=N'aaaaa',@rmtpassword='aaaaa'
GO
EXEC sp_serveroption @server=N'PROD1', @optname=N'rpc', @optvalue=N'true'
GO
EXEC sp_serveroption @server=N'PROD1', @optname=N'rpc out', @optvalue=N'true'
GO
これまでのところ、これでうまくいき、リンクサーバーはコントローラーSQLサーバー上に作成され、使用できます。
だが:
SSDTプロジェクト/ソリューション内で、リンクサーバーオブジェクトを使用すると、参照が壊れます。確かに、上記のスクリプトでは文字列定数にのみ含まれているため、スキーマはリンクサーバー名を認識しません。
サンプル:(自分でメッセージを翻訳しましたが、正確であることを保証するものではありません)
警告14 SQL71562:「手順:[dbo]。[SP1]」には、オブジェクト[PROD1]。[db1]。[dbo]。[SP1]への未解決の参照が含まれています。
したがって、私の問題は、コントローラデータベーススキーマから「ワーカー」データベーススキーマへの参照のようなものがあることですが、データベース参照を使用/挿入することができません。ワーカーのスキーマにアクセスします...「OtherServer」オプションを使用してプロジェクトに10個のデータベース参照を追加したくありません(できても、同じデータベースプロジェクトに10個の参照を追加することはできないと思います。 ..)
ソリューションでリンクサーバーオブジェクトを正しい方法でアドレス指定することは可能だと思いますが、方法がわかりません。
Aaronのシノニムの提案を試してみましたが、リンクサーバーの名前を使用するとすぐに同じ問題が発生し、名前の「背後」に不明なオブジェクトが発生します。
問題をより明確にするために質問を編集し、何百もの警告メッセージのないクリーンなソリューションが欲しいので、誰かがアイデアを持っていることを願っています。
質問に示されているメッセージによると、これは実際には警告(「警告」)であり、notエラーです。エラーが発生すると、ビルドプロセスが停止し、プロジェクトがサーバーに公開されなくなります。警告は[エラーリスト]ウィンドウに表示されるだけで、ビルドまたはパブリッシュプロセスの完了を妨げるものではありません。
Visual Studio 2013でデータベースプロジェクトを作成し、リンクサーバーから選択したストアドプロシージャを追加しました。リンクサーバー名がSQL Server上の有効なリンクサーバーと一致しない場合、SQL Server(Visual Studioではない)から報告されたパブリケーションエラーが発生しています。それ以外の場合、すべてが期待どおりに機能しました。しかし、どちらの場合も、Visual Studioのストアドプロシージャにあるリンクサーバーの参照に青色の下線が引かれ、ビルドが完了した後、[エラー一覧]ウィンドウに次のメッセージが表示されました。
Warning 2 SQL71562: Procedure: [dbo].[GetExpressDBs] has an unresolved reference to
object [LStoSqlExpress2014].[master].[sys].[databases].
これらの警告を表示したくない場合は、次の2つの方法があります。
「エラーリスト」ウィンドウの上部にある「X of Y警告」というボタンをクリックすると、「エラーリスト」ウィンドウに表示されなくなります。これを行うと、警告は表示されません(Linked Serverに関連しない警告も表示されます)が、コードに青い下線が表示され、それらにカーソルを合わせると警告が表示されます。
次の操作を行うと、Visual Studio/SSDTにこれらの特定の警告のみを無視するように(ただし、他の警告は表示する)ように指示できます。
上記の手順を実行すると、この1つの特定の警告だけが[エラーリスト]ウィンドウに表示されなくなり、リンクサーバーを使用するコードに青い下線も表示されなくなります。