表A
编号 单位名称
001 三星
002 大禹
003 微软表B 编号 单位名称 备注
001 电信 XXX
002 联通 XXX
要求
表B一但发生插入或更新,那表A也发生插入或更新,只是把表B中的新记录也插到表A中,表B更新发生更新,表A也一样(两个表中有相同记录的时候)
编号 单位名称
001 三星
002 大禹
003 微软表B 编号 单位名称 备注
001 电信 XXX
002 联通 XXX
要求
表B一但发生插入或更新,那表A也发生插入或更新,只是把表B中的新记录也插到表A中,表B更新发生更新,表A也一样(两个表中有相同记录的时候)
on 表B for insert, update
begin
if(update(表B))
begin
if exists(select 1 from 表A where 编号 in (select 编号 from inserted))
update 表A set 单位名称 = t.单位名称
from 表A a, inserted t
where a.编号 = t.编号
else
insert 表A select 编号, 单位名称 from inserted
end
end
after update,insert
as--插入
insert into A
select * from inserted
where A.编号 not in(select 编号 from inserted)--更新update A
set A.单位名称=t.单位名称
from inserted t
where A.编号 in(select 编号 from inserted)
Create trigger InsertOrUpdateB on b
for
insert,update
as
begin
if not exists(select 1 from Deleted) --没有更新,只有插入
begin
insert into a(编号,单位名称) select 编号,单位名称 from inserted
endif exists(select 1 from deleted)--更新操作
begin
update a set a.单位名称=i.单位名称 from a,inserted i,deleted d
where a.编号=d.编号
endend
for
insert,update
as
begin
if not exists(select 1 from Deleted) --没有更新,只有插入
begin
insert into a(编号,单位名称) select 编号,单位名称 from inserted
endif exists(select 1 from deleted)--更新操作
begin
update a set a.编号=i.编号,a.单位名称=i.单位名称 from a,inserted i,deleted d
where a.编号=d.编号
endend
go--创建测试表
create table a
(
编号 varchar(255),
单位名称 varchar(255)
)
gocreate table b
(
编号 varchar(255),
单位名称 varchar(255),
备注 varchar(255)
)
go--创建测试数据insert into a
select '001','三星'
union
select '002','大禹'
union
select '003','微软'
go
insert into b
select '001','电信','XXX'
union
select '002','联通','XXX'
go
--编写触发器create trigger a_insupdate
on b after insert,update
as
begin
if exists (select top 1 1 from a,inserted where a.单位名称 = inserted.单位名称)
begin
update a
set a.编号 = inserted.编号
from a,inserted
where a.单位名称 = inserted.单位名称
end
if exists (select top 1 1 from a,inserted where a.编号 = inserted.编号)
begin
update a
set a.单位名称 = inserted.单位名称
from a,inserted
where a.编号 = inserted.编号
end
else
begin
insert into a select 编号,单位名称 from inserted
end
end
--测试结果表A编号 单位名称
001 三星
002 大禹
003 微软
008 万维网
009 电信表B编号 单位名称 备注
009 电信 XXX
002 联通 XXX
008 万维网 XXX