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

问题描述 投票:2回答:1

我试图在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'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”

sql-server visual-studio-2013 linked-server database-project
1个回答
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)', ...
© www.soinside.com 2019 - 2024. All rights reserved.