如何:使用SQL Server 2008为自动更新修改日期创建触发器

Jul*_*ian 47 sql-server triggers date sql-server-2008

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

TimeEntry

Id (PK)
UserId (FK)
Description
Time
GenDate
ModDate
Run Code Online (Sandbox Code Playgroud)

触发代码:

+   TR_TimeEntry_UpdateModDate()
+   TR_TimeEntry_InsertGenDate()
Run Code Online (Sandbox Code Playgroud)

更新的一个例子ModDate很不错.

mar*_*c_s 91

我的方法:

  • 在列上定义一个默认约束,其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)
Run Code Online (Sandbox Code Playgroud)

  • 如果有人像我一样想知道这是否会递归调用自己,那么你通常会有一个RECURSIVE_TRIGGERS数据库选项,它会阻止像这样的触发器调用它自己.http://msdn.microsoft.com/en-us/library/ms190739.aspx (42认同)
  • @ 4ndro1d:`Inserted`和`Deleted`是两个伪表,它们总是存在于每个触发器中.它们表示导致触发器触发的新插入或删除的行 - 在"UPDATE"的情况下,`Inserted`在*UPDATE`操作之后包含新值*,而`Deleted`具有旧值*之前*更新 (9认同)
  • 变量`Inserted`来自哪里? (7认同)
  • 另外值得考虑`getUtcDate()`,具体取决于您的时区要求. (5认同)
  • 我没听懂。我应该将 `SET RECURSIVE_TRIGGERS` 设置为 `ON` 或 `OFF` 以防止这种情况发生吗? (2认同)
  • 为什么你必须做一个 DISTINCT? (2认同)