【问题标题】:join tables that are on different DB instance inside a stored procedure连接存储过程中不同数据库实例上的表
【发布时间】:2015-08-07 21:04:51
【问题描述】:

我在 sql server 2008 r2 中创建了一个存储过程,用于引用来自 2 个不同数据库的表,这些表在同一个 sql 实例中定义如下:-

[DB1].[dbo].[Technology]


[DB2].[dbo].[SystemInfo]

目前我们将 DB2 移动到单独的数据库实例上但在同一个数据库服务器上,那么现在我如何在新实例上引用 [DB2].[dbo].[SystemInfo]

【问题讨论】:

  • 像你写的那样直接引用
  • 通过 2 个表中的 JOIN 引用它们
  • 但我需要指定 DB2 与 DB1 相比在不同的模式上,DB1 也将在其中定义存储过程,所以我需要明确指定诸如 [SchameNAme\ DB2]
  • @johnG 我不明白。您正在编写存储过程对吗?所以你不需要定义模式。如果两个数据库在同一个 SQL 实例上,你就可以了
  • @Galma88 不,这两个数据库不在同一个架构上,我将 DB2 移动到不同的架构上,而 DB1 和它自己的 SP 是在默认架构上定义的 ..跨度>

标签: sql sql-server stored-procedures sql-server-2008-r2


【解决方案1】:

如果您将一个数据库移动到另一个实例,那么您应该将该实例添加为链接服务器,将其称为[lnkDB],然后您可以查询它:

select * from [lnkDB].[DB2].[dbo].[SystemInfo]

联接不会有所不同。仅在从链接服务器引用表时才应添加 servernane。

【讨论】:

  • 所以我将在 DB1 上添加链接服务器以在我的情况下引用 DB2 吗?不在 DB2 上?这是正确的吗?
  • 如果您的 sp 在 db1 上,那么您需要在 db1 上将链接服务器添加到 db2
  • 感谢您的回复,但在我的应用程序 (Asp.net MVC) 中,我简单地将连接字符串从“Data Source=DBServerName”修改为“Data Source=DBServerName\SqlInstanceName”,我就能够访问新 sql 实例上的表.. 所以不知道为什么我不能在存储过程中做同样的事情?
  • 数据库引擎中没有连接字符串。将链接服务器想象成连接字符串。
【解决方案2】:

这很简单,正如您在问题中所写的那样

select a.clo1,b.clo2
from [DB1].[dbo].[Technology] a
join [Link_server].[DB2].[dbo].[SystemInfo] b on a.col1=b.col1
where (any condition)

但数据库用户必须对这两个数据库都有访问权限。

【讨论】:

  • 因此,即使 DB2 与 DB1(也包含 SP)位于不同的架构上,您的代码也能正常工作
  • 数据库表模式在你使用join时无关紧要,但请先检查你的情况。
  • 很抱歉,DB2 已被移动到不同的 sql 实例而不是不同的模式 ..
  • 好的,我知道了,请查看此链接 (dba.stackexchange.com/questions/11832/…)。这可以帮助你。
  • 以上都是对的,你必须在这里使用link server。由于您的问题发生了变化,我也更新了我的答案
【解决方案3】:

我尝试更好地解释编写查询。

SELECT *
FROM [DB1].[dbo].[Technology] AS T INNER JOIN [Name_of_linked_server].[dbo][SystemInfo] AS S
                          ON T.[KEY] = S.[KEY]

如果数据库是不同的服务器,你需要一个链接服务器:

https://msdn.microsoft.com/EN-US/library/ff772782(v=sql.110).aspx

【讨论】:

  • 对不起,我修改了问题,我的意思是 DB2 已被移动到不同的 sql 实例而不是新模式...
  • 对不一致的地方感到抱歉,但您能否对我的编辑提出建议,因为我的意思是 sql 实例而不是 sql 架构?
  • 还有其他方法吗?如果注意,您能否提供一些有用的链接?
  • @johnG 我在答案中添加了一个链接! ;)
  • @johnG 好的。所以将 DB1 中的 Linked Server 添加到 DB2
猜你喜欢
  • 2016-11-22
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
相关资源
最近更新 更多