有关如何在存储过程中连接来自不同服务器的表的任何建议吗?
答案 0 :(得分:13)
如果没有更多细节,很难给出直接的例子,但这是基本的想法:
首先,在存储过程之外,主机服务器(存储过程所在的服务器)必须知道第二台服务器,包括(可能)登录信息。
在主服务器上,运行sp_addlinkedserver存储过程。这只需要做一次:
exec sp_addlinkedserver @server=’(your second server)‘;
如果您需要向第二台服务器提供登录信息(例如,该进程无法使用初始数据库连接中使用的相同凭据登录),请执行以下操作: sp_addlinkedsrvlogin存储过程:
exec sp_addlinkedsrvlogin @rmtsrvname=’(your second server)‘,@useself=false, @rmtuser=’yourusername‘, @rmtpassword=’yourpassword‘;
然后,在您的存储过程中,您可以在第二台服务器上指定表:
SELECT table1.*
FROM table1
INNER JOIN [secondserver].[database].[schema].[table] AS table2 ON
table1.joinfield = table2.joinfield
答案 1 :(得分:2)
在加入表之前,您必须首先链接两台服务器。链接后,您可以使用以下查询并替换服务器,数据库&表名。
请记住在DB2中执行以下sql:
EXEC sp_addlinkedserver DB1
GO
-- below statement connects sa account of DB2 to DB1
EXEC sp_addlinkedsrvlogin @rmtsrvname = 'DB1', @useself = 'false', @locallogin = 'sa', @rmtuser = 'sa', @rmtpassword = 'DB1 sa pwd'
GO
SELECT a.columns
FROM DB1.database_name.dbo.table_name a
INNER JOIN DB2.database_name.dbo.table_name b
ON a.columnId = b.columnId
GO
关联服务器 - http://msdn.microsoft.com/en-us/library/ms188279.aspx
答案 2 :(得分:2)
1。使用exec sp_helpserver
2. 如果您的服务器未返回,则不是Linked
,这意味着您需要添加它。 否则转到第3步。
对于 Sql Server 2008 R2 ,请转到Server Object > Linked Servers > Add new Linked Server
或者
exec sp_addlinkedserver @server='ServerName';
3. 像这样连接到辅助服务器......
exec sp_addlinkedsrvlogin
@rmtsrvname='ServerName'
, @useself=false
, @rmtuser='user'
, @rmtpassword='Password';
4. 现在您可以加入两个不同服务器的表格。
SELECT
SRV1.*
FROM
DB1.database_name.dbo.table_name SRV1
INNER JOIN DB2.database_name.dbo.table_name SRV2
ON SRV1.columnId = SRV2.columnId
GO
答案 3 :(得分:0)
您可以按以下语法编写查询以加入SQL Server中的其他服务器
SELECT table_1.*
FROM [Database_1].[dbo].[Table_1] table_1
INNER JOIN [IP_OF_SERVER_2].[Database_2].[dbo].[Table_2] table_2 ON table_1.tablekey COLLATE DATABASE_DEFAULT = table_2.tablekey COLLATE DATABASE_DEFAULT
p / s:COLLATE DATABASE_DEFAULT进行编码, 防止波纹管错误 无法解决" Vietnamese_CI_AS"之间的整理冲突和" SQL_Latin1_General_CP1_CI_AS"在等于操作。