【问题标题】:VS2010 / MSSQL - References to another database server's masterVS2010 / MSSQL - 引用另一个数据库服务器的主服务器
【发布时间】:2014-01-30 18:35:51
【问题描述】:

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

在执行环境中,两个数据库位于不同的服务器上。因此,在 VS2010 中,FirstDatabaseSecondDatabase 的引用是用服务器变量名称$(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


【解决方案1】:

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

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

【讨论】:

  • 嗨@BateTech,感谢您的回复。您附加的链接描述了如何使用 SQL Management Studio 在数据库服务器上创建链接服务器(将数据库部署到服务器后会这样做)。我们已经这样做了,executeIfUp() 在生产中可以正常工作。我在问题中描述的问题在设计时发生在 Visual Studio 中。
  • 如果您使用链接服务器在 SQL Server 中为另一台服务器上的主数据库创建同义词会怎样。掌握。数据库的同义词?然后在您的 VS 项目中,您不必使用 server 变量。如果我们在同一台服务器上有多个非产品实例,但之前没有尝试过使用单独的服务器,但理论上应该可以工作,我们在测试服务器上使用了这样的同义词来表示跨数据库引用。
  • 实际上我刚刚读到您不能为链接服务器的引用创建同义词。但现在我问自己......为什么不在测试和生产中将链接服务器命名为相同的东西?这样你就不需要 VS 项目中的 server 变量。我们为非产品实例的 Oracle 链接服务器引用执行此操作。我们有一个名为 OracleEBS 之类的链接服务器,只需将它指向的数据源切换给非产品,同时保持链接服务器名称相同。
  • 嗨@BateTech - 我们的测试和生产环境中确实有相同的链接服务器名称。我认为 Visual Studio 在设计/编译时没有链接服务器的概念——相反,它需要使用服务器名称变量才能在编译时验证架构,这正是我们正在尝试做的。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2014-11-04
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多