Tsql 每次更新行时更新列的值

Tsql 每次更新行时更新列的值,tsql,sql-server-2012,Tsql,Sql Server 2012,我正在使用SQL Server 2012。我需要跟踪表上更新的所有行(作为任何操作的一部分) 我想向要跟踪的表中添加一个新列(列名称:“LastUpdated”,类型为Datetime)。每次对该行进行更新时,我都要更新LastUpdated值。有没有具体的方法来完成这项任务 我们实施了一个类似于以下的系统: 将数据类型为datetime的新列添加到表LastUpdateDate 如果需要,请添加另一列,其数据类型为varchar(100)或您需要的任何长度 这将存储日期/时间以及执行更新的

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


我想向要跟踪的表中添加一个新列(列名称:“LastUpdated”,类型为Datetime)。每次对该行进行更新时,我都要更新LastUpdated值。有没有具体的方法来完成这项任务

我们实施了一个类似于以下的系统:

  • 将数据类型为datetime的新列添加到表
    LastUpdateDate
  • 如果需要,请添加另一列,其数据类型为
    varchar(100)
    或您需要的任何长度
这将存储日期/时间以及执行更新的人员

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

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

我们实施了一个类似于以下的系统:

  • 将数据类型为datetime的新列添加到表
    LastUpdateDate
  • 如果需要,请添加另一列,其数据类型为
    varchar(100)
    或您需要的任何长度
这将存储日期/时间以及执行更新的人员

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

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

您可能需要考虑创建一个触发器,以便在更新时触发

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的新值,您可能希望创建一个触发器来触发更新

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的新值即可

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

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
但是,此触发器不会存储已更新的内容。还要记住,如果有两个人更新它,您将只知道最近更新的日期(不是所有更新)

要保留所有更改的历史记录,您可能需要创建一个审核表(与现有表的结构几乎相同),并使用触发器将更新前的数据复制到审核表中。
这篇文章讨论了一种可靠的方法:

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

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
但是,此触发器不会存储已更新的内容。还要记住,如果有两个人更新它,您将只知道最近更新的日期(不是所有更新)

要保留所有更改的历史记录,您可能需要创建一个审核表(与现有表的结构几乎相同),并使用触发器将更新前的数据复制到审核表中。
这篇文章讨论了一种可靠的方法:

你看过触发器了吗?你看过触发器了吗?使用本地日期/时间时要非常小心。政府喜欢来回调整,通常一年两次调整一小时。这可能导致一些有趣的问题。使用本地日期/时间时要非常小心。政府喜欢来回调整,通常一年两次调整一小时。这会引起一些有趣的问题。