灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2852回复:0

[SQL Server]sql server跨域数据操作

楼主#
更多 发布于:2012-09-04 18:07

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'
使用方式:  www.atcpu.com  
增、删、改、查等操作都可依据【链接服务器名.数据库名.架构名.表/视图等对象名】形式进行,但是好像不支持这样调用函数
--查询:
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语句中,如果是复杂的处理逻辑,需要有语句块、函数或存储过程才能完成,建议使用第一种方式,即时创建、销毁链接服务器  www.atcpu.com  
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').数据库名.架构名.表名



作者 ☆华子oo○

喜欢0 评分0
游客

返回顶部