-1

我正在使用以下触发器来跟踪表中的最后修改日期:

CREATE TRIGGER trg_UpdateTimeEntry
ON dbo.TimeEntry
AFTER UPDATE
AS
    UPDATE dbo.TimeEntry
    SET ModDate = GETDATE()
    WHERE ID IN (SELECT DISTINCT ID FROM Inserted)

它说“更新后”,但即使我插入一行,它也会将 ModDate 列设置为与输入日期相同。我怎样才能阻止这种情况发生?我只希望它在我有机会进入一行时改变,而不是在添加新行时(在这种情况下它应该保持 NULL)。

谢谢!

4

1 回答 1

0
CREATE TRIGGER trg_update_my_table on my_table 
FOR UPDATE AS            
BEGIN
    UPDATE my_table
    SET modified_on=getdate()
    FROM my_table INNER JOIN deleted d
    on my_table.id = d.id
END
GO

或者您可以将定义或现有触发器更改为

CREATE TRIGGER trg_UpdateTimeEntry
ON dbo.TimeEntry
AFTER UPDATE
AS
    UPDATE dbo.TimeEntry
    SET ModDate = GETDATE()
    WHERE ID IN (SELECT DISTINCT ID FROM deleted)

插入表将包含所有新插入的记录和任何更新记录的新值,删除表将只有更新记录的旧值。

于 2013-10-08T20:23:24.840 回答