每次更改表的一列时,我都会创建此触发器,此表的另一列设置为" null"。这是我的代码:
ALTER TRIGGER [dbo].[MSF_TONKEN_CLEAR]
ON [dbo].[end]
AFTER UPDATE
AS BEGIN
SET NOCOUNT ON;
IF UPDATE (ENDNO)
BEGIN
UPDATE end
SET TOKEN = Null
FROM end e2 INNER JOIN Inserted I ON e2.ID = I.ID
WHERE I.ENDNO <> c2.ENDNO
END
END
但它没有用。我更新了专栏&#34; ENDNO&#34;并且TOKEN仍在那里。 如果我评论该行
--WHERE I.ENDNO <> c2.ENDNO
它可以工作,但是对于每次更新,不仅要更新列&#34; ENDNO&#34;。我做错了什么?
答案 0 :(得分:3)
这是AFTER
触发器。
您的比较I.ENDNO <> e2.ENDNO
将始终为false,因为INSERTED
值已在目标表中。您必须与DELETED
进行比较。
UPDATE [end] SET
TOKEN = Null
FROM [end] e2
INNER JOIN DELETED d ON e2.ID = I.ID
WHERE D.ENDNO <> e2.ENDNO
顺便说一句IF UPDATE (ENDNO)
几乎没用。即使没有改变也是如此,
例如
UPDATE ... SET ENDNO=ENDNO