我使用以下触发器来跟踪表格中的最后修改日期:
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)。
谢谢!
答案 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将包含所有新插入的记录和任何更新记录的新值,删除的表将只包含已更新记录的旧值。