0

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

我想在我要跟踪的表中添加一个新列(列名:日期时间类型的“LastUpdated”。)。每次对该行进行更新时,我都想更新 LastUpdated 值。有没有特定的方法来完成这项任务?

4

3 回答 3

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 文章讨论了一种可靠的方法:使用表审计以获取表的“快照”

于 2013-05-23T17:22:18.963 回答
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

在更新其他字段时,您可以只传递 lastupdated 的新值

于 2013-05-23T17:12:53.573 回答
0

我们已经实现了一个类似于以下的系统:

  • LastUpdatedDate将数据类型为 datetime的新列添加到表中
  • 如果需要,添加另一列,LastUpdatedBy其数据类型为varchar(100)或任何您需要的长度

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

然后,当您更新表中的行时,您将在更新语句中包含这两列,如下所示:

update yourtable
set yourCol = 'newValue',
   LastUpdatedDate = getdate(),
   LastUpdatedBy = 'yourUserIdentifier'
于 2013-05-23T17:10:46.530 回答