〓■如果我希望通过触发器使多个数据库中的多个表中的数据同步,应该怎么做呢??■〓

明珠佩佩 2006-08-23 09:54:38
如果我希望通过触发器使多个数据库中的多个表中的数据同步,应该怎么做呢??

比如,有数据库A、B、C,表A.aa, B.bb, C.cc

三个表分别在不同的数据库中,但是有相同属性的字段,字段名未必相同

我想能否写一个触发器

当其中任何一个表中的记录执行修改、删除、插入等操作的时候

其他表中对应的字段也同步进行。

能否举例说明呢?帮顶有分。
...全文
390 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ldw701 2006-09-25
  • 打赏
  • 举报
回复
mark
SalhinSaaral 2006-08-25
  • 打赏
  • 举报
回复
不是的,老兄,你没有理解zlp321002(龙卷风2006) 的意思。

exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'

上述两条代码可以连接任何服务器,你如果操作多个数据库的话,可以连接多个服务器,依此类推
明珠佩佩 2006-08-25
  • 打赏
  • 举报
回复
...................................
...................................
...................................
...................................
...................................
明珠佩佩 2006-08-24
  • 打赏
  • 举报
回复
...................................
...................................
...................................
...................................
...................................
rookie_one 2006-08-23
  • 打赏
  • 举报
回复
我只看懂了第二位大哥的解决方法,正在理解第一个。。。。
明珠佩佩 2006-08-23
  • 打赏
  • 举报
回复
TO: zlp321002(龙卷风2006)

你提供的代码似乎只是对同一台服务器的同一个数据库中的两个表进行操作吧

或许本人愚钝,从代码中我看不出两个表是来自于不同的两个数据库啊

只是t_a, t_b的两个触发器相互影响而已

TO:i9988(冒牌j9988 V0.2)

你提供的方法我还没有试,不过从代码上看应该可行的^_^
fxf66 2006-08-23
  • 打赏
  • 举报
回复
帮顶
mopeboy 2006-08-23
  • 打赏
  • 举报
回复
呵呵,学习!!!
i9988 2006-08-23
  • 打赏
  • 举报
回复
首先,要把nested triggers 选项关闭
USE master
EXEC sp_configure 'nested triggers', '0'
RECONFIGURE WITH OVERRIDE
go

分别建立触发器
create trigger a.dbo.tr_aa
on a.dbo.aa
for insert ,delete,update
as
delete b
from b.dbo.bb b,deleted d
where b.key=d.key

delete c
from c.dbo.cc b,deleted d
where c.key=d.key

insert b.dbo.bb
select * from inserted

insert c.dbo.cc
select * from inserted

go

--其他触发器类似


zlp321002 2006-08-23
  • 打赏
  • 举报
回复
如果数据库没有在同一台服务器.要创建联接服务器.

然后就和本机跨数据库同步一样的操作.

--创建链接服务器
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
go


--同一服务器.
create table t_a(id int identity(1,1),username varchar(20))

create table t_b(id int identity(1,1),username varchar(20))

create trigger tr_a on t_a
for update,insert,delete
as
alter table t_b DISABLE TRIGGER tr_b
----------------------------------
if not exists (select * from deleted) --插入
insert t_b(username) select username from inserted
else if not exists (select * from inserted)--删除
delete t_b where id in (select id from deleted)
else--更新
update a set a.username=i.username from t_b as a,inserted as i where a.id=i.id
alter table t_b ENABLE TRIGGER tr_b

------------------------------------------
create trigger tr_b on t_b
for update,insert,delete
as
alter table t_a DISABLE TRIGGER tr_a
----------------------------------
if not exists (select * from deleted) --插入
insert t_a(username) select username from inserted
else if not exists (select * from inserted) --删除
delete t_a where id in (select id from deleted)
else --更新
update a set a.username=i.username from t_a as a,inserted as i where a.id=i.id
alter table t_a ENABLE TRIGGER tr_a

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧