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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Visual Studio数据库项目使用链接服务器数据库引用相关的知识,希望对你有一定的参考价值。

我试图在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行无法在sys.servers中找到服务器'TBSSRV07 TBSSQLDEVSRV' 。验证是否指定了正确的服务器名称。如有必要,执行存储过程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'TBSSRV07TBSSQLDEVSRV';

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”

答案

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

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)', ...

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

使用 Visual Studio 2010 将 libexif 编译为静态库 - 然后从 Visual C++ 项目链接

使用 Visual Studio 项目使 Opencv 可移植并消除链接错误

在 Visual Studio 解决方案中链接两个项目

Visual Studio 2015无法添加服务参考

Visual Studio 数据库项目 - 部署到没有所有数据库引用的环境

Visual Studio - 项目缺少库/链接器问题?