SQL Server 2005-ModifyDate列-使用计算列是实现此功能的正确方法吗?

SQL Server 2005-ModifyDate列-使用计算列是实现此功能的正确方法吗?,sql,sql-server,sql-server-2005-express,Sql,Sql Server,Sql Server 2005 Express,我只想在插入或更新记录时自动填充“ModifyDate”列 我应该使用触发器还是使用计算列 (使用SSMS2005和SQL Server 2005 Express)我想您指的是默认约束,而不是计算列 如果是的话,没关系。我喜欢那样做。一个可能的缺点是,客户机可以覆盖默认值,但是如果您不信任客户机,那么最好在存储过程中包装表访问 触发器也会起作用,但触发器往往会产生额外的复杂性。包含触发器的编码错误是最难解决的数据库问题之一。插入的部分很简单-只需在该列上定义默认值,并且在插入新行时,不要为该列指

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

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


(使用SSMS2005和SQL Server 2005 Express)

我想您指的是默认约束,而不是计算列

如果是的话,没关系。我喜欢那样做。一个可能的缺点是,客户机可以覆盖默认值,但是如果您不信任客户机,那么最好在存储过程中包装表访问


触发器也会起作用,但触发器往往会产生额外的复杂性。包含触发器的编码错误是最难解决的数据库问题之一。

插入的部分很简单-只需在该列上定义默认值,并且在插入新行时,不要为该列指定值

更新部分更为棘手-您必须编写一个,然后更新该列。我认为在SQLServer中没有其他方法可以做到这一点

问题是:你真的需要实际的日历日期吗?如果不是,如果您只想有一个关于行是否已更改的“标记”,请查看(以前称为
时间戳


我真的不明白如何使用计算列来进行此操作-必须将该日期存储在某个位置,并通过INSERT和每个后续更新使其保持最新-只有触发器才能做到这一点。

我建议不要使用触发器,并使用server getDate函数使用存储过程设置Date Modified列

例如:


更新客户Set FirstName='Jim',LastName='Jones',DateModified=getDate()

default在更新行时没有帮助…他们只有在第一次插入时才会“激发”…计算列将无法工作。如果将计算列的值设置为GETDATE(),它将始终返回当前日期,而不是上次更新。哇,我没有意识到计算列会在select上重新计算。谢谢如果计算值被持久化怎么办?我知道这很旧,但是@GuillermoGutiérrez,SQL Server不允许在持久化的计算列中使用非确定性函数。见: