我有一个VS 2010解决方案,其中包含两个数据库项目FirstDatabase
和SecondDatabase
。每个都有master
和msdb
的数据库引用,FirstDatabase
引用了SecondDatabase
。
在执行环境中,这两个数据库位于不同的服务器上。因此,在VS2010中,FirstDatabase
对SecondDatabase
的引用是使用服务器变量名$(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
作为有效参考?
答案 0 :(得分:-1)
从您引用的文档“如果您在另一台服务器上引用数据库项目中的对象,则必须将其定义为目标服务器上的链接服务器”(请参阅http://technet.microsoft.com/en-us/library/ff772782.aspx)。还要确保将$(OtherServer)设置为服务器变量。
答案 1 :(得分:-1)
在Visual Studio 2012中(我不知道它是否适用于2010)您可以右键单击数据库项目,添加数据库引用,选择系统数据库并选择“master”。