一、SQl跨服务器查询的实现 SQl跨服务器查询的二种实现方法:
|
1
2
3
4
5
6
7
8
9
|
select * from OPENDATASOURCE( \'SQLOLEDB\', \'Data Source=远程ip;User ).库名.dbo.表名 insert 本地库名..表名 select * from OPENDATASOURCE( \'SQLOLEDB\', \'Data Source=远程ip;User ).库名.dbo.表名 |
或使用联结服务器:
|
1
2
3
|
EXEC sp_addlinkedserver \'别名\',\'\',\'MSDASQL\',NULL,NULL,\'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;\' exec sp_addlinkedsrvlogin @rmtsrvname=\'别名\',@useself=\'false\',@locallogin=\'sa\',@rmtuser=\'sa\',@rmtpassword=\'密码\' GO |
然后你就可以如下:
|
1
2
3
4
|
select * from 别名.库名.dbo.表名 insert 库名.dbo.表名 select * from 别名.库名.dbo.表名 select * into 库名.dbo.新表名 from 别名.库名.dbo.表名 go |
1、使用 ODBC 的 Microsoft OLE DB 提供程序
|
1
|
EXEC sp_addlinkedserver \'别名\',\'\',\'MSDASQL\',NULL,NULL,\'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;\' |
如果加上参数@catalog,可以指定数据库
|
1
|
exec sp_addlinkedsrvlogin @rmtsrvname=\'别名\',@useself=\'false\',@locallogin=\'sa\',@rmtuser=\'sa\',@rmtpassword=\'密码\' |
2、使用SQL Server 的 Microsoft OLE DB 提供程序
|
1
2
|
exec sp_addlinkedserver @server=\'别名\',@provider=\'sqloledb\',@srvproduct=\'\',@datasrc=\'远程服务器名\'exec sp_addlinkedsrvlogin @rmtsrvname=\'wzb\',@useself=\'false\',@locallogin=\'sa\',@rmtuser=\'sa\',@rmtpassword=\'密码\' |
然后你就可以如下:
|
1
2
3
4
|
select * from 别名.库名.dbo.表名 insert 库名.dbo.表名 select * from 别名.库名.dbo.表名 select * into 库名.dbo.新表名 from 别名.库名.dbo.表名 go |
例1、 此示例在 SQL Server 的实例上创建一台名为 S1_instance1 的链接服务器, 该服务器使用 SQL Server 的 Microsoft OLE DB 提供程序。
|
1
2
|
EXEC sp_addlinkedserver @server=\'S1_instance1\', @srvproduct=\'\', @provider=\'SQLOLEDB\', @datasrc=\'S1\instance1\' |
例2、 --建立链接服务器
|
1
2
3
4
5
6
7
8
9
|
EXEC sp_addlinkedserver \'joe\',\'\',\'MSDASQL\',NULL,NULL,\'DRIVER={SQL Server};SERVER=192.168.0.1;UID=sa;PWD=123;\'--建立链接服务器登录映射 exec sp_addlinkedsrvlogin @rmtsrvname=\'joe\',@useself=\'false\',@locallogin=\'sa\',@rmtuser=\'sa\',@rmtpassword=\'123\'go --查询数据 select * from joe.schooladmin.dbo.agent --删除链接服务器登录映射和链接服务器: exec sp_droplinkedsrvlogin \'joe\' ,\'sa\'exec sp_dropserver \'joe\' |
小结:如果是单查询的话,建议使用第一种方法,如果是多条查询的话,建议使用第二种方法。
二、SQl跨数据库查询的实现
|
1
|
select * from [AAA]..Table1 a inner join [BBB]..Table2 b on a.id1 = b.id2 |