在存储过程中连接不同数据库实例上的表
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。
我在 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。