我编写了一个触发器,需要根据行中实际更新的列对表执行一些不同的工作。我使用以下方法完成了此操作
IF UPDATE(column-name)
那部分工作正常。然而,事实证明,代码的其他部分通过设置每个值来更新行,无论该值是否实际更改,这会导致触发器触发“已更新”但其值实际上未更改的部分根本不。
由于更改导致此问题的代码可能不是一个选择,除了必须在 INSERTED 和 DELETED 表之间进行比较之外,是否有更简单的方法来防止这种情况发生(在这种情况下 IF UPDATE 毫无意义)?
IF EXISTS (SELECT *
FROM
INSERTED I JOIN DELETED D ON I.Key = D.Key
WHERE
I.Col <> D.Col)
...
或者使用表变量来缓存,以避免重复使用I和D。
SELECT
CASE WHEN I.Col1 <> D.Col1 THEN 1 ELSE 0 END AS Col1Diff,
CASE WHEN I.Col2 <> D.Col2 THEN 1 ELSE 0 END AS Col2Diff,
...
FROM
INSERTED I JOIN DELETED D ON I.Key = D.Key
或者结合想法来预先测试所有更改并退出触发器
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)