我在SQL Server 2008 R2数据库中有一个表,并且想要添加一个名为LastUpdated的列,该列在每次更新行时都会自动更改。这样,我可以看到每行的最后更新时间。
似乎SQL Server 2008 R2没有像早期版本那样处理这种数据类型,因此我不确定执行此操作的最佳方法。我想知道如何使用触发器,但是当触发器更新行时会发生什么?会再次触发触发器吗?
最佳答案
要知道最后更新的行,您需要创建一个类型为DATETIME
/ DATETIME2
的新列,并使用触发器对其进行更新。没有数据类型会在每次更新行时自动使用日期/时间信息自动更新。
为了避免递归,您可以在触发器内使用UPDATE()
子句,例如
ALTER TRIGGER dbo.SetLastUpdatedBusiness
ON dbo.Businesses
AFTER UPDATE -- not insert!
AS
BEGIN
IF NOT UPDATE(LastUpdated)
BEGIN
UPDATE t
SET t.LastUpdated = CURRENT_TIMESTAMP -- not dbo.LastUpdated!
FROM dbo.Businesses AS t -- not b!
INNER JOIN inserted AS i
ON t.ID = i.ID;
END
END
GO
关于triggers - 如何在SQL Server 2008 R2表中添加 “last updated”列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7349288/