【发布时间】:2014-01-30 18:35:51
【问题描述】:
我有一个 VS 2010 解决方案,其中包含两个数据库项目,FirstDatabase 和 SecondDatabase。每个都有对master 和msdb 的数据库引用,FirstDatabase 有对SecondDatabase 的引用。
在执行环境中,两个数据库位于不同的服务器上。因此,在 VS2010 中,FirstDatabase 对SecondDatabase 的引用是用服务器变量名称$(OtherServer) 定义的。
FirstDatabase 包含一个函数executeIfUp(),用于测试OtherServer 上的SecondDatabase 是否已启动:
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 服务器上具有相同的架构)。如果我向FirstDatabase 的数据库项目添加对[$(OtherServer)].master 的附加数据库引用,我会收到一条错误消息,指出FirstDatabase 的数据库项目中有对master 的重复引用。
我的问题是:如何让 VS2010 将 [$(OtherServer)].master 解析为有效参考?
【问题讨论】:
-
server variable name $(OtherServer)是什么意思?你是说 msbuild 属性吗? -
嗨@HamletHakobyan,服务器变量
$(OtherServer)指的是VS2010 使用SQLCMD 变量来代表服务器和数据库名称。有关详细信息,请参阅the MSDN documentation on this topic。
标签: sql-server visual-studio-2010