gpt4 book ai didi

sql-server - TSql 触发器只需要在值已更改的列上触发

转载 作者:行者123 更新时间:2023-12-02 10:36:26 24 4
gpt4 key购买 nike

我编写了一个触发器,需要根据行中实际更新的列对表执行一些不同的工作。我使用

完成了此操作
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

或者结合想法来预先测试所有更改并退出触发器

关于sql-server - TSql 触发器只需要在值已更改的列上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2007954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com