SQL Server 2008 局域网跨服务器T-SQL操作(一)

--查看当前链接情况:
select * from sys.servers;

  --增加链接,参数:服务器别名,为链接服务器的OLE DB数据源的产品名称,与此数据源对应的OLE DB访问接口的唯一编程标识符(PROGID),由OLE DB访问接口解释的数据源的名称
  --这种设置链接服务器的方式强制链接服务器的名称与 SQL Server 远程实例的网络名称相同,也就是计算机名称
  --@server:链接别名(自定义)
  --@provider:访问接口类型
  --@datasrc:对方的数据库实例

官方参考:  sp_addlinkedserver
EXEC sp_addlinkedserver
@server=N'ZJ01',
@srvproduct=N'',
@provider=N'SQLOLEDB',
@datasrc=N'172.16.1.15\SQL2008R2'
--增加用户登录链接,参数:被访问的服务器别名,是否通过模拟本地登录名或显式提交登录名和密码来连接,是否本地登录,登录用户名,登录密码 
官方参考:  sp_addlinkedsrvlogin 
EXEC sp_addlinkedsrvlogin 'WIN-6SK2NQX','false',NULL,'sa','server' 

--使用 sp_helpserver 来显示可用的链接服务器
Exec sp_helpserver

 --应用:链接别名.数据库名.dbo.表名
 SELECT * from ZJ01.[Mvc_web_zj01].dbo.sys_user

--删除已经存在的某个链接,参数:服务器别名,本地服务器上的SQL Server登录。如果要删链接,则先要删除登录映射 
Exec sp_droplinkedsrvlogin 'WIN-6SK2NQX',NULL 
Exec sp_dropserver 'WIN-6SK2NQX'

如果在操作过程中遇到“其他会话正在使用事务的上下文”错误,我是在触发器中使用这个方式操作链接数据库的,发生了这个错误。

一种解释:查看一下该存储过程中是否有链接服务器指向本地,SQLSERVER2005不支持在分布式事务处理中存在指向本地的链接服务器(环回链接服务器)
又一种解释:其原因是由于计算机名和sql server 2005的servername不一致所致。
可以通过 select @@servername 
查看数据库中的计算机网络名,重新按照这个名字添加一下链接服务器使用
 
posted @ 2016-05-05 14:01  竹殇  阅读(1317)  评论(0编辑  收藏  举报