在数据库项目中使用带有 OPENQUERY 的链接服务器

Cha*_*ake 10 sql-server-2008 visual-studio view linked-server ssdt

我有一个运行数据库的 SQL Server 2008,我想放入 TFS。因此,我使用了导入数据库的 Visual Studio 2013 数据库项目。修复了一堆错误后,我只剩下一个错误:

在一个视图中,开发人员用于OPENQUERY访问链接服务器。因此,我导入了一个包含正确数据库的 DACPAC,并Add Database Reference使用以下参考选项将其添加到项目中。

数据库参考设置

初始脚本版本

这是原始视图创建的较短版本:

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

这导致以下错误:

错误 136 SQL71501:视图:[dbo].[vwStatus] 具有对对象 [LinkedServer] 的未解析引用。

第一次尝试

所以我尝试插入服务器名称变量

FROM       OPENQUERY($(LinkedServer), 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1
Run Code Online (Sandbox Code Playgroud)

这导致

错误 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 
Run Code Online (Sandbox Code Playgroud)

我总是收到错误。

我不知道我在这里俯瞰什么。你?谢谢你的时间!

(遗憾的是我无法添加visual-studio-2013 标签,所以我使用了visual-studio)

Cha*_*ake 9

我设法让它工作:

我创建了一个新的数据库项目master。在那里我创建了一个文件夹Server Object和一个文件LinkedServer.sql。在 SQL 文件中,我添加了链接服务器:

GO
EXECUTE sp_addlinkedserver @server = N'LinkedServer', @srvproduct = N'sqlserver', @provider = N'SQLNCLI', @datasrc = N'LinkedServer.domain';
Run Code Online (Sandbox Code Playgroud)

在将数据库项目添加master到我的解决方案并在我的原始数据库项目中引用它之后,我能够使用初始语法构建项目;

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