有什么建议可以在存储过程中连接来自不同服务器的表格吗?
缺乏更多细节,很难给出直接的示例,但基本思路如下:
首先,在存储过程之外,主机服务器(将承载存储过程的服务器)必须知道第二个服务器的情况,包括(可能的)登录信息。
在您的主服务器上运行 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.使用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
在连接表之前,您必须先链接两个服务器。一旦它们链接,您可以使用下面的查询并替换服务器、数据库和表名称。
请记住在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/zh-cn/library/ms188279.aspx
你可以按照以下语法编写查询来在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
提示:使用 COLLATE DATABASE_DEFAULT 进行编码,避免以下错误: 在等于操作中无法解析 "Vietnamese_CI_AS" 和 "SQL_Latin1_General_CP1_CI_AS" 之间的排序冲突。