Sql-Server-2008
在數據庫項目中使用帶有 OPENQUERY 的連結伺服器
我有一個 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