EXEC sp_configure 'show advanced options', 1; GO RECONFIGURE GO EXEC sp_configure 'Ad Hoc Distributed Queries', 1 GO RECONFIGURE GO SELECT * INTO #T1 FROM OPENROWSET('SQLOLEDB' ,'SERVER=1.1.1.1,1433;UID=sa;PWD=123456','SELECT * FROM test.dbo.test') A--或者是(前提是建立好linkserver) SELECT * FROM [1.1.1.1].test.dbo.test
--建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库 EXEC master.dbo.sp_addlinkedserver @server = N'remote_link', --链接名称 @srvproduct='ms', @provider=N'SQLNCLI', @datasrc=N'192.168.1.16,1433' --远程服务器的ip和端口EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link', @useself=N'False', @locallogin=NULL, @rmtuser=N'sa', --远程服务器的用户名 @rmtpassword='password'--远程服务器的密码 --在本地执行的语句,一般是把远程的表加载到本地,然后进行关联操作 --也就是说是在本地进行的关联操作,适合本地的记录数大于远程的表 select * from 数据库名称.dbo.表名 a inner join [remote_link].数据库名称.dbo.表名 b on a.关联字段 = b.关联字段 --另外,有个查询提示需要注意 remote --关联操作会在远程服务器进行,本地表的记录会加载到远程, --适合远程表的记录数较多,而本地记录数较小 select * from 数据库名称.dbo.表名 a inner remote join [remote_link].数据库名称.dbo.表名 b on a.关联字段 = b.关联字段 先试试看性能如何。
select * from 服务器B.数据库B.dbo.表名 这样来访问B库中的表,但是跨服务器查询往往性能都不高
参考 http://msdn.microsoft.com/en-us/library/aa560998.aspx
存储过程性能能否好点性能都一样。 可以直接用SQL实现,也可以先创建链接服务器
SELECT *
FROM openrowset('MSDASQL',
'DRIVER={SQL Server};SERVER=服务器B的IP地址;UID=sa;PWD=sa',
库名.dbo.表名)
这样可以在服务器A的任意新建查询里面查询服务器B的某库的某表使用链接服务器就先创建服务器B的链接
select * from 数据库B.dbo.表名来访问就可以了
http://item.taobao.com/item.htm?spm=686.1000925.1000774.23.nFGG8X&id=27406928729
GO
RECONFIGURE
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO
SELECT * INTO #T1 FROM
OPENROWSET('SQLOLEDB' ,'SERVER=1.1.1.1,1433;UID=sa;PWD=123456','SELECT * FROM test.dbo.test') A--或者是(前提是建立好linkserver)
SELECT * FROM [1.1.1.1].test.dbo.test
--建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库
EXEC master.dbo.sp_addlinkedserver @server = N'remote_link', --链接名称
@srvproduct='ms',
@provider=N'SQLNCLI',
@datasrc=N'192.168.1.16,1433' --远程服务器的ip和端口EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link',
@useself=N'False',
@locallogin=NULL,
@rmtuser=N'sa', --远程服务器的用户名
@rmtpassword='password'--远程服务器的密码
--在本地执行的语句,一般是把远程的表加载到本地,然后进行关联操作
--也就是说是在本地进行的关联操作,适合本地的记录数大于远程的表
select *
from 数据库名称.dbo.表名 a
inner join [remote_link].数据库名称.dbo.表名 b
on a.关联字段 = b.关联字段
--另外,有个查询提示需要注意 remote
--关联操作会在远程服务器进行,本地表的记录会加载到远程,
--适合远程表的记录数较多,而本地记录数较小
select *
from 数据库名称.dbo.表名 a
inner remote join [remote_link].数据库名称.dbo.表名 b
on a.关联字段 = b.关联字段 先试试看性能如何。