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

Posted

技术标签:

【中文标题】如何:使用 SQL Server 2008 为自动更新修改日期创建触发器【英文标题】:How to: Create trigger for auto update modified date with 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() ? 【参考方案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 @ 有旧值之前更新

以上是关于如何:使用 SQL Server 2008 为自动更新修改日期创建触发器的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008怎么自动备份数据库

SQL Server 2008如何创建定期自动备份任务

SQL Server 2008如何创建定期自动备份任务

SQL server2008 临时表tempdb如何自动释放存储空间

我用Sqlserver2008查询时生成的Sql语句,都是自动换行的,如何设置可以不换行?

sql server 2008错误日志如何优化自动删除