当更新数据时,触发器既执行了插入又执行了更新两个条件

create trigger 员工_部门_岗位_变动
on 员工表
after insert, update, delete
as
begin
if exists (select * from inserted)
begin
insert into 人事变更表 (工号,原部门名,原岗位名,新部门名,新岗位名, 日期,备注)
select 工号, null ,null, inserted.部门名,inserted.岗位名,getdate(),'新进员工'
from inserted
end;
if exists (select * from deleted)
begin
insert into 人事变更表 (工号,原部门名,原岗位名,新部门名,新岗位名, 日期,备注)
select inserted.工号, deleted.部门名,deleted.岗位名, inserted.部门名,inserted.岗位名,getdate(),'员工变动'
from deleted, inserted
where deleted.工号 = inserted.工号
and (deleted.部门名 <> inserted.部门名 or deleted.岗位名 <> inserted.岗位名);
end;
if exists (select * from deleted)
and not exists (select * from inserted
where 工号 = inserted.工号)
begin
insert into 人事变更表 (工号,原部门名,原岗位名,新部门名,新岗位名, 日期,备注)
select 工号, deleted.部门名,deleted.岗位名, null,null,getdate(),'员工离职'
from deleted;
end;
end
create trigger 员工_部门_岗位_变动
on 员工表
after insert, update, delete
as
begin
if exists (select * from inserted)
begin
insert into 人事变更表 (工号,原部门名,原岗位名,新部门名,新岗位名, 日期,备注)
select 工号, null ,null, inserted.部门名,inserted.岗位名,getdate(),'新进员工'
from inserted
end;
if exists (select * from deleted)
begin
insert into 人事变更表 (工号,原部门名,原岗位名,新部门名,新岗位名, 日期,备注)
select inserted.工号, deleted.部门名,deleted.岗位名, inserted.部门名,inserted.岗位名,getdate(),'员工变动'
from deleted, inserted
where deleted.工号 = inserted.工号
and (deleted.部门名 <> inserted.部门名 or deleted.岗位名 <> inserted.岗位名);
end;
if exists (select * from deleted)
and not exists (select * from inserted
where 工号 = inserted.工号)
begin
insert into 人事变更表 (工号,原部门名,原岗位名,新部门名,新岗位名, 日期,备注)
select 工号, deleted.部门名,deleted.岗位名, null,null,getdate(),'员工离职'
from deleted;
end;
end

用一个delete触发器做,不知道你为什么要使用两个

create trigger 员工_部门_岗位_变动
on 员工表
after insert, update
as
begin
if exists (select * from inserted)
begin
insert into 人事变更表 (工号,原部门名,原岗位名,新部门名,新岗位名,日期,备注)
select 工号, null, null, inserted.部门名, inserted.岗位名, getdate(), '新进员工'
from inserted
end;

if exists (select * from deleted)
begin
insert into 人事变更表 (工号,原部门名,原岗位名,新部门名,新岗位名,日期,备注)
select inserted.工号, deleted.部门名, deleted.岗位名, inserted.部门名, inserted.岗位名, getdate(), '员工变动'
from deleted, inserted
where deleted.工号 = inserted.工号
and (deleted.部门名 <> inserted.部门名 or deleted.岗位名 <> inserted.岗位名);
end;
end


不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    对不起,作为AI语言模型,我无法判断问题的上下文信息和您的具体需求,无法提供更详细的解决方案。建议提供更详细的背景信息和问题描述,以便我更好地了解您的问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^