比较特定列

时间:2016-07-01 15:36:57

标签: sql sql-server triggers

每次更改表的一列时,我都会创建此触发器,此表的另一列设置为" 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;。我做错了什么?

1 个答案:

答案 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