SQL Server更新/修改日期字段

时间:2013-10-08 19:46:51

标签: sql sql-server triggers

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

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

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

谢谢!

1 个答案:

答案 0 :(得分: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)

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