我只想在插入或更新记录时自动为我填充“ModifyDate”列。
我应该使用触发器还是可以使用计算列?
(使用 SSMS2005 和 SQL Server 2005 Express)
我只想在插入或更新记录时自动为我填充“ModifyDate”列。
我应该使用触发器还是可以使用计算列?
(使用 SSMS2005 和 SQL Server 2005 Express)
INSERTed 部分很简单 - 只需在该列上定义一个默认值,当您插入新行时,不要为该列指定值。
UPDATE 部分比较棘手 - 您必须编写一个触发 ON UPDATE的触发器,然后更新该列。我认为在 SQL Server 中没有其他方法可以做到这一点。
问题是:你真的需要实际的日历日期吗?如果没有,如果您只想使用“标记”来判断某行是否已更改,请改为查看ROWVERSION 列类型(以前称为TIMESTAMP
)。
我真的不知道如何为此使用计算列-您必须将该日期存储在某处,并使其与 INSERT 和每个后续 UPDATE 保持同步-只有触发器才能做到这一点。
我建议远离触发器并使用服务器 getDate 函数使用存储过程设置 Date Modified 列。
例子:
更新客户设置 FirstName = 'Jim'、LastName = 'Jones'、DateModified = getDate()
我想您的意思是默认约束而不是计算列。
如果是这样,那没关系。我更喜欢那样做。一个可能的缺点是客户端可以覆盖默认值,但如果您不信任客户端,您不妨将表访问封装在存储过程中。
触发器也可以工作,但触发器往往会产生额外的复杂性。包含触发器的编码错误是目前最困难的数据库问题之一。