web-dev-qa-db-ja.com

データベースプロジェクトでOPENQUERYを使用したリンクサーバーを使用する

SQL Server 2008でTFSに投入したいデータベースを実行しています。したがって、私はDBをインポートしたVisual Studio 2013データベースプロジェクトを使用しました。たくさんのエラーを修正した後、エラーが1つだけ残っています。

1つのビューでは、開発者はOPENQUERYを使用してリンクサーバーにアクセスしました。そこで、適切なデータベースを含むDACPACをインポートし、次の参照オプションを使用してAdd Database Referenceを使用してプロジェクトに追加しました。

Settings for Database Reference

スクリプトの初期バージョン

以下は、元のビュー作成の短いバージョンです。

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

これにより、次のエラーが発生します。

エラー136 SQL71501:ビュー:[dbo]。[vwStatus]には、オブジェクト[LinkedServer]への未解決の参照があります。

最初の試み

それで、サーバー名変数を挿入しようとしました

FROM       OPENQUERY($(LinkedServer), 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

につながる

エラー176 SQL46010:$(LinkedServer)付近の構文が正しくありません。

さらなる試み

私は少し周りをいじって、次のことを試しました(引用符付き識別子を有効にしているかどうかに関係なく):

FROM       OPENQUERY("$(LinkedServer)", 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([$(LinkedServer)], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([LinkedServer], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY("LinkedServer", 'SELECT * FROM [DB].[dbo].tbStatus') AS 

常にエラーが発生します。

私がここで見落としているものの手がかりはありません。あなたは?御時間ありがとうございます!

(残念ながら、visual-studio-2013タグを追加できないため、visual-studioを使用しました)

10
Chake

私はそれをうまく動かすことができました:

新しいデータベースプロジェクトmasterを作成しました。そこに私はフォルダを作成しましたServer ObjectとファイルLinkedServer.sql。 SQLファイルにリンクサーバーを追加しました。

GO
EXECUTE sp_addlinkedserver @server = N'LinkedServer', @srvproduct = N'sqlserver', @provider = N'SQLNCLI', @datasrc = N'LinkedServer.domain';

データベースProject masterをソリューションに追加し、元のデータベースプロジェクトで参照した後、最初の構文を使用してプロジェクトをビルドできました。

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1
9
Chake