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

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

似乎SQL Server 2008 R2没有像早期版本那样的数据types来处理这个问题,所以我不确定最好的办法。 我想知道使用触发器,但触发器更新行时会发生什么? 会再次触发触发器等吗?

要知道上一次更新哪一行,需要创build一个types为DATETIME / DATETIME2的新列,并用触发器更新它。 没有数据types每次更新行时都会自动使用date/时间信息自动更新。

为了避免recursion,可以使用触发器中的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 

不幸的是,这并不容易。

您可以添加一个新的DATETIME (或DATETIME2 )字段到您的表中,并且可以给它一个GETDATE()的默认约束 – 它将在插入新行时设置该值。

不幸的是,除了创build一个AFTER UPDATE触发器之外,没有任何“开箱即用”的方法来保持它始终更新。 触发器本身并不难写,但是你必须为每一张表格都写下这个function。