触发器 修改一个表的记录另一个表的相应记录也修改

Crystal1981 2005-08-19 07:42:06
如主表A,字段:ID,NAME,ADDRESS;另一表B,结构同A,其记录为表A的部分记录。
修改表A的一条记录后,如果表B也有此条记录,则表B的此条记录也跟着修改。
请问怎么写触发器
...全文
315 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Crystal1981 2005-08-19
  • 打赏
  • 举报
回复
现在我还有表C,D....不确定的表个数,他们都同表B一样,怎么处理呢?
怎样把这些表一起处理啊!
MorningTea 2005-08-19
  • 打赏
  • 举报
回复
你写个触发器不就一起处理了吗?!

要不用外键,可是维护起来麻烦,还是不要用!
Crystal1981 2005-08-19
  • 打赏
  • 举报
回复
有没有办法把这些表一起处理啊
MorningTea 2005-08-19
  • 打赏
  • 举报
回复
B join inserted I on I.ID=B.ID---就是插入A的纪录在B也存在I.ID=B.ID的话,select 1就会有资料,否则为null罗
Crystal1981 2005-08-19
  • 打赏
  • 举报
回复
非常感谢各位!
现在我还有表C,D,不确定的表个数,他们都同表B一样,怎么处理呢?
Crystal1981 2005-08-19
  • 打赏
  • 举报
回复
请你讲一讲select 1 from B join inserted I on I.ID=B.ID这一句的意思,好吗?
zlp321002 2005-08-19
  • 打赏
  • 举报
回复
--给你一个例子:
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


select * from t_a
select * from t_b

--测试:
insert t_a(username) values('test')
insert t_b(username) values('test2')
update t_a set username='test1' where id=1
update t_b set username='test3' where id=1
delete from t_a where id=1
delete from t_b where id=2
--------------------------
select * from t_a
select * from t_b
netcoder 2005-08-19
  • 打赏
  • 举报
回复
create trigger t_test on 表A

for insert,update,delete
delete 表B
where id in(select id from deleted)
insert into 表B
select * from inserted
vivianfdlpw 2005-08-19
  • 打赏
  • 举报
回复
create trigger tr
on A
for update
as
if exists(select 1 from B join inserted I on I.ID=B.ID)
begin
update B
set name=I.name,
address=I.address
from B
join inserted I on I.id=B.id
end
go

34,587

社区成员

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

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