Sql-Server-2008

在數據庫項目中使用帶有 OPENQUERY 的連結伺服器

  • February 28, 2020

我有一個 SQL Server 2008 執行一個我想放入 TFS 的數據庫。因此,我使用了一個 Visual Studio 2013 數據庫項目,並在其中導入了數據庫。在修復了一堆錯誤之後,我只剩下一個錯誤:

在一個視圖中,開發人員用於OPENQUERY訪問連結伺服器。Add Database Reference因此,我導入了一個包含正確數據庫的 DACPAC,並使用以下參考選項將其添加到項目中。

數據庫參考設置

初始腳本版本

這是原始視圖創建的較短版本:

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)

我設法讓它工作:

我創建了一個新的數據庫項目master。在那裡我創建了一個文件夾Server Object和一個文件LinkedServer.sql。在 SQL 文件中,我添加了連結伺服器:

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

在將數據庫項目添加master到我的解決方案並在我的原始數據庫項目中引用它之後,我能夠使用初始語法建構項目;

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

引用自:https://dba.stackexchange.com/questions/56437