很多时候我们需要用到分布式查询,比如分布在两台服务器上的数据,如果想进行操作就要进行分布式跨库查询。
因为工作关系、研究了分布式查询、现记录下、以备往后不时之需!
写在前面:请注意(要是不想因为报没有权限问题而让你烦恼的话、最好使用 sa 登录!)
进行分布式查询要准备的:
1.首先确认你想要使用的两台数据库有没有开启远程连接功能、并且协议有没有开通!
(开通步骤)
开始菜单-----程序-----SQL200×---------配置工具-----SQL外网配置-------服务和连接的外网应用配置器。
点击远程连接-----选中本地连接和远程连接-------选中 同时使用TCP/IP 和named pipes(如下图)
2.开启好远程连接功能了、下面开始建立链接库(此处只写我使用的方法、更多方法请参考baidu.com)
exec sp_dropserver 'DBVIP','droplogins'-----此方法为 删除你不需要使用的链接库 DBVIP 为此链接库别名、
exec sp_helpserver -----。。。为显示数据库现在所有的链接库
EXEC sp_addlinkedserver ------此方法为添加链接库
@server='DBVIP', --被访问的服务器别名 ------此参数只是为链接库设置一个别名(好记就行、不用太过纠结!)
@srvproduct='', ------要添加为链接服务器的 OLE DB 数据源的产品名称。 (默认值为null 就好了、像我这样什么都不填)
@provider='SQLOLEDB', ------与数据源对用的编码标示符。(SQL数据库 为 SQLOLEDB,其他的请移步至baidu.com)
@datasrc='192.168.2.150\实例名' ------此为访问的服务器IP地址和实例名。(有的说两者只写其一就好、但好像我的SQL不行。反正报什么“字符串无法解析的”什么错误的 请加上实例名)
exec sp_addlinkedsrvlogin
@rmtsrvname = 'DBVIP', -------上面设置的别名
@useself = 'false',
@locallogin = null,
@rmtuser ='fpsc_sw', ------你要远程的数据库的 账号 最好为(sa)
@rmtpassword ='fpsc_sw' ------远程数据库的密码
3.上面如果都设置好了、下面就可以进行跨库查询了(以下语句基于上面设置的链接库)
假设现在有个 A 数据库 里面有 testA 表
有个B 数据库 里面有个testB 表
在A 中查询B 中的数据:
select * from DBVIP.B.dbo.testB (dbo为架构名。其实就是你表名前面的那个)
从B 中查询A中的数据:
select * from DBVIP.A.dbo.testA
插入数据(把A中的数据插入到B中)
insert openquery(DBVIP,'select * from B.dbo.testB') select * from A
(之前插入写错了、使用的应该是 openquery )
以上就是我使用的分布式链接库查询
还有个方法是不需要建立链接库的
方法如下(从A 查询B 中的数据)
select * from openrowset('SQLOLEDB' , '192.168.2.150\实例名' ; 'fpsc_sw' ; 'fpsc_sw' , B.dbo.testB)
注意 语句中 分号 好 逗号的区别(IP 和 用户名之后都为;分号)
希望此篇“陋文”能解答你一些疑惑!