Visual Studio数据库项目使用链接服务器数据库引用

时间:2014-07-18 13:38:17

标签: sql-server visual-studio-2013 linked-server database-project

我正在尝试在Visual Studio 2013(使用SQLServer 2008)项目中使用链接的Server数据库引用。

我能够通过制作另一个带有所述参考的项目来构建它 在这个链接:

[Do I need a database reference for a linked server in a SQL Server database project?

但是项目在部署步骤中失败,并出现以下错误: 错误474 SQL72014:.Net SqlClient数据提供程序:消息7202,级别11,状态2, 过程rs_ReportSubscriptions,第3行无法找到服务器' TBSSRV07 \ TBSSQLDEVSRV'在     sys.servers。验证是否指定了正确的服务器名称。     如有必要,执行存储过程sp_addlinkedserver以将服务器添加到sys.servers。     有关此错误的详细信息,请参阅产品文档中的疑难解答主题。     C:\ TFS2010 \ EtracsDatabase \ Etracs \ BIN \调试\ Etracs.sql

在已部署的服务器上,这是有效的(使用链接服务器...链接:TBSSRV07 \ TBSSQLDEVSRV)

这是在创建脚本的视图中发生的。我试图添加sp_addLinkedServer 到脚本...但在部署代码中我的sp_addlinkedServer没有出现:

以下是视图创建的代码:

    EXEC sp_addlinkedserver   
   @server=N'TBSSRV07', 
   @srvproduct=N'',
   @provider=N'SQLNCLI', 
   @datasrc=N'TBSSRV07\TBSSQLDEVSRV';

GO
CREATE VIEW [dbo].[rs_ReportSubscriptions] AS 
SELECT  C.Name ,
        CAST(ExtensionSettings AS XML).value('(/ParameterValues/ParameterValue/Value)[1]',
                                             'varchar(250)') AS TargetSettingsTo ,
        CAST(ExtensionSettings AS XML).value('(/ParameterValues/ParameterValue/Value)[2]',
                                             'varchar(250)') AS TargetSettingsCC ,

        LastStatus ,
        LastRunTime
FROM    [$(TBSSRV07)].[$(ReportServer)].dbo.Subscriptions AS S
        JOIN [$(TBSSRV07)].[$(ReportServer)].dbo.Catalog AS C ON C.ItemID = S.Report_OID

以下是产生问题的结果脚本:

GO
PRINT N'Creating [dbo].[rs_ReportSubscriptions]...';


GO
CREATE VIEW [dbo].[rs_ReportSubscriptions] AS 
SELECT  C.Name ,
        CAST(ExtensionSettings AS XML).value('(/ParameterValues/ParameterValue/Value)[1]',
                                             'varchar(250)') AS TargetSettingsTo ,
        CAST(ExtensionSettings AS XML).value('(/ParameterValues/ParameterValue/Value)[2]',
                                             'varchar(250)') AS TargetSettingsCC ,

        LastStatus ,
        LastRunTime
FROM    [$(TBSSRV07)].[$(ReportServer)].dbo.Subscriptions AS S
        JOIN [$(TBSSRV07)].[$(ReportServer)].dbo.Catalog AS C ON C.ItemID = S.Report_OID
GO
PRINT N'Update complete.';

最后,这是我在数据库引用中使用的值: :setvar TBSSRV07" TBSSRV07 \ TBSSQLDEVSRV"

1 个答案:

答案 0 :(得分:0)

不确定这是否是“最佳”答案,但是在这种情况下,我添加了一个预部署脚本来创建链接服务器(如果不存在)。

IF NOT EXISTS (SELECT 1 FROM sys.servers s WHERE s.[name] = N'$(TBSSRV07)' AND s.is_linked = 1)
BEGIN
    EXECUTE sp_addlinkedserver N'$(TBSSRV07)', ...