-- SQL Server 2005 创建跨服务器“触发器” --

luoyoumou luoyoumou 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
-- 今天的唯一一点收获,贴出来与大家分享!(欢迎大家多提宝贵意见!)

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

-- 整了一上午终于把楼主这个问题给整好了!
-- 比如说:在本地 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;
...全文

相关推荐

评论 186
收藏 已收藏
分享
返回顶部
luoyoumou
MS-SQL Server 34,876 成员 254,635 内容