如何确定 UPDATE 触发器中是否发生了更改?例如,我有一个名为 person 的表,其中只有一列 NAME,其中包含值“Mike”。如果我跑
UPDATE person SET NAME = 'Mike'
如何确定更新触发器中没有任何更改?我知道关于
更新(列)
语句,但我不想迭代列。还有其他方法可以实现此目的吗?
Update(column) 仅表明该列参与更新,但并未表明其值已更改。例如,
update Person SET Name = Name
即使任何行中的 Name 都没有更改, update(name) 中也会产生 true 。
要检查新值是否与旧值不同,您可以使用except http://msdn.microsoft.com/en-us/library/ms188055%28v=sql.90%29.aspx因为 except 将从顶部集中删除底部集中存在的行。由于人员表可能具有主键,因此不存在删除已删除的对应项的已更改项目的危险。但是如果你决定改变*
对于感兴趣的列的列表,请确保包含主键。
insert into logTable (ID)
select a.ID
from
(
select * from Inserted
except
select * from Deleted
) a
额外的好处是这也适用于插入,因为删除将为空并且插入的所有行都将被返回。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)