每次对行进行更新时,都会更新列的值

时间:2013-05-23 17:06:52

标签: tsql sql-server-2012

我正在使用SQL Server 2012.我需要跟踪在表上进行更新的所有行(作为任何操作的一部分)。

我想在我想要跟踪的表中添加一个新列(列名:Datetime的“LastUpdated”)。我想在每次更新该行时更新LastUpdated值。有没有具体的方法来实现这项任务?

3 个答案:

答案 0 :(得分:2)

您可以创建一个触发器。像这样:

CREATE TRIGGER dbo.Table1_Updated
ON dbo.Table1
FOR UPDATE /* Fire this trigger when a row is UPDATEd */
AS BEGIN
   UPDATE dbo.Table1 SET dbo.Table1.LastUpdated = GETDATE()
   FROM INSERTED
   WHERE inserted.id=Table1.id
END

但是,此触发器不会存储更新的内容。另请注意,如果两个人更新它,您将只拥有最新更新的日期(并非所有更新)。

要保留所有更改的历史记录,您可能需要创建一个审计表(与现有表几乎相同的结构),并使用触发器将更新前的数据复制到审计表中。 这篇SO文章谈到了一个可靠的方法:Using table auditing in order to have "snapshots" of table

答案 1 :(得分:1)

您可能希望了解如何创建触发更新

的触发器
Create TRIGGER Trigger_Name ON Table_Name
FOR update
AS
BEGIN

// update lastupdated column of updated record with current date and or time

END

或者,您可以在更新其他字段时传递上次更新的新值

答案 2 :(得分:0)

我们已经实施了类似于以下的系统:

  • 使用日期时间
  • 的数据类型向表LastUpdatedDate添加新列
  • 如果需要,添加另一列LastUpdatedBy,数据类型为varchar(100)或您需要的长度

这将存储日期/时间和执行更新的人。

然后,当您更新表中的行时,您将在update语句中包含这两列,类似于:

update yourtable
set yourCol = 'newValue',
   LastUpdatedDate = getdate(),
   LastUpdatedBy = 'yourUserIdentifier'