日期:2014-05-18  浏览次数:20720 次

-- SQL Server 2005 创建跨服务器“触发器” --
-- 今天的唯一一点收获,贴出来与大家分享!(欢迎大家多提宝贵意见!)

http://topic.csdn.net/u/20100610/09/80f14ecc-ff88-4d96-97e7-1a6e3cf1fa53.html?11629
SQL code

--  整了一上午终于把楼主这个问题给整好了!
--  比如说:在本地 test 数据库 与局域网 245 的 hlldb数据库中 都有一张结构如下的表 t

CREATE TABLE T(
id INT,
name VARCHAR(20)
);

-- 现在假设当 本地 test 数据库 中的 表 t中插入记录行的同时向  局域网 245 的 hlldb数据库 的表t 插入相同的记录行,
-- 实现如下(用触发器实现)

-- Step 1 :创建链接服务器、及其登录授权(在本地 test数据库执行)
--创建链接服务器 
-- 示例代码:
-- exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
-- exec sp_addlinkedsrvlogin  'ITSV ', 'false ',null, '用户名 ', '密码 ' 

-- 实际操作代码:
exec sp_addlinkedserver   'it245 ', ' ', 'SQLOLEDB ', '192.168.1.245' 
exec sp_addlinkedsrvlogin  'it245 ', 'false ',null, 'sa', 'go2wan@szty' 

-- Step 2 :创建触发器(在本地 test数据库执行)
CREATE TRIGGER tr_in_t on [dbo].[t]
FOR INSERT
AS
BEGIN
  SET NOCOUNT ON
  SET XACT_ABORT ON 
  DECLARE @id INT, @name VARCHAR(20);
  SELECT @id=id, @name=name FROM inserted;

  INSERT INTO it245.hlldb.dbo.t(id,name) VALUES(@id,@name);
END

INSERT INTO t(id,name) values(1,'luoyoumou1');


-- 如果出现这样的错误:(请参考以下五个网址的文档)
链接服务器"it245"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "该伙伴事务管理器已经禁止了它对远程/网络事务的支持。"。

-- http://hi.baidu.com/wgx331/blog/item/ef81be45deaadc27cffca32e.html
-- http://blog.pfan.cn/jixian/34117.html
-- http://dyuan.blog.sohu.com/16734773.html
-- http://sai5d.blog.163.com/blog/static/62225483200901322939411/
-- http://topic.csdn.net/t/20060523/11/4771841.html

INSERT INTO t(id,name) values(1,'luoyoumou1');

SELECT * FROM t;
SELECT * FROM it245.hlldb.dbo.t;


------解决方案--------------------
SF还在不?
搬凳子学习
------解决方案--------------------
与楼主一起学习,蹭楼主的分。帮顶
------解决方案--------------------
路过学习下
------解决方案--------------------
探讨
-- 今天的唯一一点收获,贴出来与大家分享!(欢迎大家多提宝贵意见!)

http://topic.csdn.net/u/20100610/09/80f14ecc-ff88-4d96-97e7-1a6e3cf1fa53.html?11629

SQL code

-- 整了一上午终于把楼主这个问题给整好了!
-- 比如说:在本地 test 数据库 与局域网 245 的 hlldb……

------解决方案--------------------
我只是关心稳定性以及效率
不要动不动就连不上远程库了
------解决方案--------------------
我也来学习一哈哈。。。。顺便蹭点分。。O(∩_∩)O~
------解决方案--------------------
再问一个问题
关于连接远程服务器的命令
exec sp_addlinkedserver 'it245 ', ' ', 'SQLOLEDB ', '192.168.1.245' 
exec sp_addlinkedsrvlogin 'it245 ', 'false ',null, 'sa', 'go2wan@szty' 

是在什么时候执行?
是放在触发器里面每次触发的时候连接?还是在每次本地SQL Server服务启动后执行一次就可以了

------解决方案--------------------
我是来接分的
------解决方案--------------------
学习了
------解决方案--------------------
确定有试成功吗?
------解决方案--------------------
靠,传说中的~~~老板在这里发贴了~~~

顶呀~~~~
------解决方案--------------------
up...........
------解决方案--------------------
个人 不赞成 使用触发器,出了问题 查的头大, A触发B,B触发C, c又触发A , .... 更何况你弄个 跨网络的触发器 会疯掉的 .......


今天挺热,泼你点水 凉快凉快
------解决方案--------------------
很好很强大, 可惜才疏学浅看不懂