5

我只想在插入或更新记录时自动为我填充“ModifyDate”列。

我应该使用触发器还是可以使用计算列?

(使用 SSMS2005 和 SQL Server 2005 Express)

4

3 回答 3

5

INSERTed 部分很简单 - 只需在该列上定义一个默认值,当您插入新行时,不要为该列指定值。

UPDATE 部分比较棘手 - 您必须编写一个触发 ON UPDATE的触发器,然后更新该列。我认为在 SQL Server 中没有其他方法可以做到这一点。

问题是:你真的需要实际的日历日期吗?如果没有,如果您只想使用“标记”来判断某行是否已更改,请改为查看ROWVERSION 列类型(以前称为TIMESTAMP)。

我真的不知道如何为此使用计算列-您必须将该日期存储在某处,并使其与 INSERT 和每个后续 UPDATE 保持同步-只有触发器才能做到这一点。

于 2010-05-12T21:24:31.677 回答
3

我建议远离触发器并使用服务器 getDate 函数使用存储过程设置 Date Modified 列。

例子:

更新客户设置 FirstName = 'Jim'、LastName = 'Jones'、DateModified = getDate()

于 2010-05-12T21:42:55.000 回答
2

我想您的意思是默认约束而不是计算列。

如果是这样,那没关系。我更喜欢那样做。一个可能的缺点是客户端可以覆盖默认值,但如果您不信任客户端,您不妨将表访问封装在存储过程中。

触发器也可以工作,但触发器往往会产生额外的复杂性。包含触发器的编码错误是目前最困难的数据库问题之一。

于 2010-05-12T21:24:13.907 回答