我正在使用 SQL Server 2012。我需要跟踪对表进行的所有更新(作为任何操作的一部分)的行。
我想在我要跟踪的表中添加一个新列(列名:日期时间类型的“LastUpdated”。)。每次对该行进行更新时,我都想更新 LastUpdated 值。有没有特定的方法来完成这项任务?
我正在使用 SQL Server 2012。我需要跟踪对表进行的所有更新(作为任何操作的一部分)的行。
我想在我要跟踪的表中添加一个新列(列名:日期时间类型的“LastUpdated”。)。每次对该行进行更新时,我都想更新 LastUpdated 值。有没有特定的方法来完成这项任务?
您可以创建一个触发器。像这样:
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 文章讨论了一种可靠的方法:使用表审计以获取表的“快照”
您可能想研究创建一个触发器以在更新时触发
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 的新值
我们已经实现了一个类似于以下的系统:
LastUpdatedDate
将数据类型为 datetime的新列添加到表中LastUpdatedBy
其数据类型为varchar(100)
或任何您需要的长度这将存储日期/时间和执行更新的人员。
然后,当您更新表中的行时,您将在更新语句中包含这两列,如下所示:
update yourtable
set yourCol = 'newValue',
LastUpdatedDate = getdate(),
LastUpdatedBy = 'yourUserIdentifier'