使用链接服务器数据库参考的 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数据库项目使用链接服务器数据库引用