我正在使用SQL Server 2012.我需要跟踪在表上进行更新的所有行(作为任何操作的一部分)。
我想在我想要跟踪的表中添加一个新列(列名:Datetime的“LastUpdated”)。我想在每次更新该行时更新LastUpdated值。有没有具体的方法来实现这项任务?
答案 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'