在存储过程中连接不同数据库实例上的表

join tables that are on different DB instance inside a stored procedure

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

[DB1].[dbo].[Technology]


[DB2].[dbo].[SystemInfo]

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

这很简单,就像你在问题中写的那样

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)

但是数据库用户必须能够访问这两个数据库。

我试着解释如何更好地编写查询。

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

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

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

加入不会有什么不同。您应该只在从链接服务器引用 table 时添加 servernane。