【问题标题】:How to: Create trigger for auto update modified date with SQL Server 2008如何:使用 SQL Server 2008 为自动更新修改日期创建触发器
【发布时间】:2011-12-05 23:32:07
【问题描述】:

很高兴知道如何创建一个自动更新我的 SQL Server 表中的modifiedDate 列的触发器:

表格TimeEntry

Id (PK)
UserId (FK)
Description
Time
GenDate
ModDate

触发码:

+   TR_TimeEntry_UpdateModDate()
+   TR_TimeEntry_InsertGenDate()

更新ModDate 的示例会很好。

【问题讨论】:

  • 必须是触发器吗?
  • 为什么在更新时不将列值设置为 TR_TimeEntry_UpdateModDate() = GetDate() ?

标签: sql-server sql-server-2008 date triggers


【解决方案1】:

我的做法:

  • ModDate 列上定义一个默认约束,其值为GETDATE() - 这将处理INSERT 情况

  • 有一个AFTER UPDATE 触发器来更新ModDate

类似:

CREATE TRIGGER trg_UpdateTimeEntry
ON dbo.TimeEntry
AFTER UPDATE
AS
    UPDATE dbo.TimeEntry
    SET ModDate = GETDATE()
    WHERE ID IN (SELECT DISTINCT ID FROM Inserted)

【讨论】:

  • 也值得考虑getUtcDate(),具体取决于您的时区要求。
  • 如果有人像我一样想知道这是否会递归调用自身,那么您通常会关闭一个 RECURSIVE_TRIGGERS 数据库选项,它可以防止这样的触发器调用自身。 msdn.microsoft.com/en-us/library/ms190739.aspx
  • 我没听懂。我应该使用SET RECURSIVE_TRIGGERSONOFF 来防止这种情况发生吗?
  • 变量Inserted从何而来?
  • @4ndro1d: InsertedDeleted 是两个伪表,始终存在于每个触发器中。它们表示导致触发器触发的新插入或删除的行 - 对于UPDATEInserted 包含UPDATE 操作之后 的新值,而@987654338 @ 有旧值之前更新
猜你喜欢
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 1970-01-01
相关资源
最近更新 更多