gpt4 book ai didi

triggers - SQL Server Update 触发器在值为 null 时不更新列

转载 作者:行者123 更新时间:2023-12-05 05:24:41 28 4
gpt4 key购买 nike

我有一个更新触发器,当另一列 (col2) 更新为 2(从另一个值)时,将 +1 添加到行的数字列 (col1)。我正在尝试计算 col2 更新为 2 的次数。当 col1 不为 null 时,触发器工作正常,但我希望也能够处理 null 情况(将 null 视为 0)。

我认为合并函数 (coalesce(deleted.col1+1,1)) 可以工作,但如果列开始时为空,则它仍然为空。如果该值不为空,它会与合并函数一起“工作”。

NOT NULL 条件也不适用于 null 情况。此外,第二个 UPDATE (SET col1=1) 带有 WHERE 子句,询问 deleted.col1 IS NULL 是否在 null 情况下不更新,所以我是有点困惑。

关于问题是什么有什么想法吗?

代码:

CREATE TRIGGER schema1.trigger1 
ON schema1.table1
FOR UPDATE
AS
IF UPDATE(col2)
BEGIN
UPDATE t
SET t.col1 = coalesce(d.col1+1,1)
FROM schema1.table1 AS t
INNER JOIN INSERTED AS i ON t.ID = i.ID
INNER JOIN DELETED AS d ON i.ID = d.ID
WHERE i.col2 = 2
AND d.col2 != 2
AND i.col1 = d.col1;
--WHERE...i.col1 = d.col1 added in case this column is being updated by user
END;

第一次发帖,所以如果我能做些什么来改进我的问题,请随时告诉我。

最佳答案

您的问题出在 WHERE 子句中,而不是您的 COALESCE() 函数:

WHERE i.col2 = 2 AND d.col2 != 2 AND i.col1 = d.col1;

如果 d.col1 为 NULL,第二个条件 (i.col1 = d.col1) 永远不会计算为 TRUE。

一种可能的解决方案是编写如下内容:

WHERE 
i.col2 = 2 AND
d.col2 != 2 AND
(i.col1 = d.col1 OR (i.col1 IS NOT NULL AND d.col1 IS NULL)) ;

关于triggers - SQL Server Update 触发器在值为 null 时不更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34093672/

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