如何在SQL Server 2008 R2表中添加"上次更新"列?

Avr*_*oel 43 triggers sql-server-2008-r2

我在SQL Server 2008 R2数据库中有一个表,并且想要添加一个名为LastUpdated的列,每次更新行时都会自动更改.这样,我可以看到每个行最后一次更新的时间.

似乎SQL Server 2008 R2没有像早期版本那样处理这种数据类型,所以我不确定最好的方法.我想知道使用触发器,但是当触发器更新行时会发生什么?那会再触发触发器等吗?

Aar*_*and 62

要知道上次更新了哪一行,您需要创建一个类型为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
Run Code Online (Sandbox Code Playgroud)

  • 不是我!即使我有足够的积分,我也不会投票给这些答案,因为它们都非常有帮助.我将尝试这一点,并将报告我如何继续. (2认同)

mar*_*c_s 10

不幸的是,这并不容易.

您可以向表中添加一个新的DATETIME(或DATETIME2)字段,并且可以为其指定默认约束GETDATE()- 这将在插入新行时设置该值.

不幸的是,除了创建AFTER UPDATE触发器之外,没有"开箱即用"的方式来保持它始终更新.触发器本身并不难写,但你必须为每个具有该功能的单个表编写它.....