SqlServer跨库查询
时间:2021-07-01 10:21:17
帮助过:4人阅读
较第一种(通过sp_addlinkedserver建立链接服务器)简单,适合简单的sql语句中,如果是复杂的逻辑,需要有语句块、函数或者存储过程才能完成时,建议使用第一种(即时创建、销毁连接服务器)
- 通过sp_addlinkedserver建立链接服务器
- 使用步骤
- 通过Sp_AddLinkedServer创建链接服务器
- 示例: Exec Sp_AddLinkedServer ‘RemoteLinkMasterDB‘,‘‘,‘SqlOleDB‘,‘172.21.1.1\MyDBInstace‘
- 通过Sp_AddLinkedSrvLogin 创建链接服务器使用账户、密码
- 示例: Exec Sp_AddLinkedSrvLogin ‘RemoteLinkMasterDB‘,‘false‘,null,‘MyMasterDataBaseUser‘,‘MyMasterDBBaseUserPassword‘
- 通过Sp_ServerOption 设置 RPC、RPC Out为True(如果不需要执行跨域存储过程则不需要设置此项)
- Exec Sp_ServerOption ‘RemoteLinkMasterDB‘,‘RPC‘,‘true‘;
- Exec sp_ServerOption ‘RemoteLinkMasterDB‘,‘RPC Out‘,‘true‘;
- 使用之后,通过Sp_DropServer删除链接服务器、删除链接登陆
- Exec Sp_DropServer ‘RemoteLinkMasterDB‘,‘DropLogins‘;
- SQL中使用示例:
- 查询:Select * From RemoteLinkMasterDB.数据库名称(Database Name).Scheme(数据库架构).表/视图名;
- 执行跨域存储过程:Exec RemoteLinkMasterDB.数据库名称(Database Name).Scheme(数据库架构).存储过程名(参数相关);
- 还可以使用openquery函数:Select * From OpenQuery(RemoteLinkMasterDB,‘Select * From 数据库名称.架构名.表名‘);
- 没有链接服务器时,可以使用openrowset或者opendatasource函数
- OpenRowSet用法示例:
- Select * From OpenRowSet(‘SqlOleDB‘,‘172.21.1.1\MyDBInstace‘,‘MyMasterDataBaseUser‘,‘MyMasterDBBaseUserPassword‘,‘Select GetDate()‘);
- Select * From OpenRowSet(‘SqlOleDB‘,‘Source=172.21.1.1\MyDBInstace;UID=MyMasterDataBaseUser;PWD=MyMasterDBBaseUserPassword‘,‘Select GetDate()‘);
- OpenDataSource用法示例:
- Select * From OpenDataSource(‘SqlOleDB‘,‘Data Source=172.21.1.1\MyDBInstace;User ID=MyMasterDataBaseUser;Password=MyMasterDBBaseUserPassword‘).数据库名.架构名.表名
- 这两种方式必须开通 Ad Hoc Distributed Queries。
参考:http://www.2cto.com/database/201206/136383.html
SqlServer跨库查询
标签: