如何确定UPDATE触发器中是否有变化?例如,我有一个名为person的表,只有一列NAME包含值’Mike’。如果我跑步
UPDATE person SET NAME = 'Mike'
如何在更新触发器中确定没有变化?我知道
UPDATE(COL)
语句,但我不想迭代列。有没有办法完成这个?
解决方法
更新(列)仅表示列参与更新,但不表示其值已更改。例如,
update Person SET Name = Name
即使在任何行中没有更改名称,在update(name)中也会生成true。
要检查新值是否与旧版本不同,您将使用except,因为除了将删除底部集中存在的顶层中的行。由于人桌可能具有主键,所以没有删除已删除的对方的已更改项目的危险。但是,如果您决定将*更改为有趣列的列表,请确保包含主键。
insert into logTable (ID) select a.ID from ( select * from Inserted except select * from Deleted ) a