以文本方式查看主题

-  昂捷论坛  (http://enjoyit.com.cn/bbs/index.asp)
--  □-通用类  (http://enjoyit.com.cn/bbs/list.asp?boardid=27)
----  sql server跨域数据操作  (http://enjoyit.com.cn/bbs/dispbbs.asp?boardid=27&id=8635)

--  作者:小七
--  发布时间:2012/11/19 16:35:03
--  sql server跨域数据操作

1.通过sp_addlinkedserver创建连接服务器

--创建链接服务器,即建立远程服务器映射
exec sp_addlinkedserver \'RemoteSV\' , \'\' , \'SQLOLEDB\' , \'172.27.203.220\'
--登录链接服务器
exec sp_addlinkedsrvlogin \'RemoteSV\' , \'false\' , null , \'AssetAdmin\' , \'smgit\'
--设置链接服务器属性rpc与rpc out为true,如果不需要执行跨域存储过程则不需设置此项
exec sp_serveroption \'RemoteSV\',\'rpc\',\'true\'
exec sp_serveroption \'RemoteSV\',\'rpc out\',\'true\'

使用方式:
增、删、改、查等操作都可依据【链接服务器名.数据库名.架构名.表/视图等对象名】形式进行,但是好像不支持这样调用函数

--查询:
select * from RemoteSV.数据库名.架构名.表/视图名

--执行跨域存储过程
exec RemoteSV.数据库名.架构名.存储过程名

--有链接服务器的情况下,还可以使用openquery函数,如:
select * FROM openquery(RemoteSV , \'SELECT * FROM 数据库名.架构名.表名\')

--数据操作之后,删除链接登录、删除链接服务器
exec sp_dropserver \'RemoteSV\' , \'droplogins\'

2.没有链接服务器时,可以使用openrowset或opendatasource函数,在实施之前,需要在sql server的外围应用配置器中启用OPENROWSET和OPENDATASOURCE支持

--以下两种写法都可以,注意到没有,最后一个参数可以写sql语句,这样就可以跨域调用自定义函数了,相较于第一种方式,openrowset函数的优势是方便应用于简单的sql语句中,如果是复杂的处理逻辑,需要有语句块、函数或存储过程才能完成,建议使用第一种方式,即时创建、销毁链接服务器
select * from openrowset(\'SQLOLEDB\' , \'172.27.203.220\' ; \'AssetAdmin\' ; \'smgit\' , \'select getdate()\')

select * from openrowset(\'SQLOLEDB\' , \'source=172.27.203.220;uid=AssetAdmin;pwd=smgit\',\'select getdate()\')

--另外还可以使用opendatasource函数,如
select * from opendatasource(\'SQLOLEDB\' , \'Data Source=172.27.203.220; User ID=AssetAdmin;Password=smgit\').数据库名.架构名.表名