连接来自不同服务器的表

el *_*nho 9 sql-server sql-server-2000

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

sco*_*rin 15

没有更多细节,很难给出直接的例子,但这里有一个基本的想法:

首先,在存储过程之外,主机服务器(存储过程将在其上的服务器)必须知道第二服务器,包括(可能)登录信息.

在主服务器上,运行sp_addlinkedserver存储过程.这只需要做一次:

exec sp_addlinkedserver @server=’(your second server)‘;
Run Code Online (Sandbox Code Playgroud)

如果需要向第二个服务器提供登录信息(例如,进程无法使用初始数据库连接中使用的相同凭据登录),请使用sp_addlinkedsrvlogin存储过程执行此操作:

exec sp_addlinkedsrvlogin @rmtsrvname=’(your second server)‘,@useself=false, @rmtuser=’yourusername‘, @rmtpassword=’yourpassword‘;
Run Code Online (Sandbox Code Playgroud)

然后,在存储过程中,您可以在第二台服务器上指定表:

SELECT table1.*
FROM table1
INNER JOIN [secondserver].[database].[schema].[table] AS table2 ON
    table1.joinfield = table2.joinfield
Run Code Online (Sandbox Code Playgroud)


ѺȐe*_*llү 7

1.检查您是否有任何链接服务器使用exec sp_helpserver

2.如果您的服务器未返回,则并不Linked意味着您需要添加它。否则转到第 3 步。

对于Sql Server 2008 R2,请转到Server Object > Linked Servers > Add new Linked Server

或者

exec sp_addlinkedserver @server='ServerName'; 
Run Code Online (Sandbox Code Playgroud)

3.像这样连接到辅助服务器...

exec sp_addlinkedsrvlogin 
@rmtsrvname='ServerName'
, @useself=false
, @rmtuser='user'
, @rmtpassword='Password';
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)