我在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/

10-13 02:03