连接来自不同服务器的表

时间:2012-01-06 01:51:48

标签: sql-server sql-server-2000

有关如何在存储过程中连接来自不同服务器的表的任何建议吗?

4 个答案:

答案 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"在等于操作。