使用链接服务器数据库参考的 Visual Studio 数据库项目

Posted

技术标签:

【中文标题】使用链接服务器数据库参考的 Visual Studio 数据库项目【英文标题】:Visual Studio Database Project using linked server database reference 【发布时间】:2014-07-18 13:38:16 【问题描述】:

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

我可以通过使用概述的引用制作另一个项目来构建它 在此链接中:

[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 行找不到服务器 'TBs-s-rV07\TBSSQLDEVSRV' 在 系统服务器。验证是否指定了正确的服务器名称。 如有必要,执行存储过程 sp_addlinkedserver 将服务器添加到 sys.servers。 有关此错误的更多信息,请参阅产品文档中的故障排除主题。 C:\tfs2010\EtracsDatabase\Etracs\bin\Debug\Etracs.sql

在部署的服务器上,这正在工作(使用链接服务器...链接:TBs-s-rV07\TBSSQLDEVSRV)

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

这是创建视图的代码:

    EXEC sp_addlinkedserver   
   @server=N'TBs-s-rV07', 
   @srvproduct=N'',
   @provider=N'SQLNCLI', 
   @datasrc=N'TBs-s-rV07\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    [$(TBs-s-rV07)].[$(ReportServer)].dbo.Subscriptions AS S
        JOIN [$(TBs-s-rV07)].[$(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    [$(TBs-s-rV07)].[$(ReportServer)].dbo.Subscriptions AS S
        JOIN [$(TBs-s-rV07)].[$(ReportServer)].dbo.Catalog AS C ON C.ItemID = S.Report_OID
GO
PRINT N'Update complete.';

最后是我在数据库参考中使用的值: :setvar TBs-s-rV07 "TBs-s-rV07\TBSSQLDEVSRV"

【问题讨论】:

您的问题解决了吗?如果是这样,请将您的解决方案添加为问题的答案。 【参考方案1】:

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

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

【讨论】:

以上是关于使用链接服务器数据库参考的 Visual Studio 数据库项目的主要内容,如果未能解决你的问题,请参考以下文章

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

Visual Studio 2015无法添加服务参考

visualstudio怎么链接到MySQL数据库

如何离线安装Visual Studio 2017

(fwrite(&stud[i],sizeof(struct student),1,fp)!=1在C语言中是啥意思

用visual studio 2017来调试python