VS2010 / MSSQL - 引用另一个数据库服务器的主服务器

时间:2014-01-30 18:35:52

标签: sql-server visual-studio-2010

我有一个VS 2010解决方案,其中包含两个数据库项目FirstDatabaseSecondDatabase。每个都有mastermsdb的数据库引用,FirstDatabase引用了SecondDatabase

在执行环境中,这两个数据库位于不同的服务器上。因此,在VS2010中,FirstDatabaseSecondDatabase的引用是使用服务器变量名$(OtherServer)定义的。

FirstDatabase包含一个函数executeIfUp(),用于测试SecondDatabase上的OtherServer是否已启动:

create function executeIfUp() returns int as 
begin
 declare @value int
 set @value = 0
 if (select [state] from [$(OtherServer)].master.sys.databases where [name] = 'SecondDatabase') = 0
 begin /* do stuff */ end
 return @value
end

问题是VS2010抱怨缺少参考:

SQL04151: Function: [dbo].[executeIfUp] has an unresolved reference to object [$(OtherServer)].[master].[sys].[databases].[name].

这显然正在发生,因为VS2010并未将[$(OtherServer)].master解释为对master数据库(在所有MSSQL服务器上名义上具有相同架构)的引用。如果我向[$(OtherServer)].master的{​​{1}}数据库项目添加了一个额外的数据库引用,我会收到一条错误消息,指出FirstDatabase的数据库项目中有master的重复引用。

我的问题是:如何让VS2010解析FirstDatabase作为有效参考?

2 个答案:

答案 0 :(得分:-1)

从您引用的文档“如果您在另一台服务器上引用数据库项目中的对象,则必须将其定义为目标服务器上的链接服务器”(请参阅​​http://technet.microsoft.com/en-us/library/ff772782.aspx)。还要确保将$(OtherServer)设置为服务器变量。

  1. 单击“定义服务器变量”。
  2. 在“名称”中,键入代表服务器的变量的名称。
  3. 在“值”中,键入变量所代表的服务器的名称。

答案 1 :(得分:-1)

在Visual Studio 2012中(我不知道它是否适用于2010)您可以右键单击数据库项目,添加数据库引用,选择系统数据库并选择“master”。