禁用默认值列上的 INSERT 操作 - SQL Server
在 Sql Server 2008 中,我有一个由数据提供程序应用程序填充的表。
我想在表中保留“INSERT_DATE”列,以便我可以知道插入记录的日期。
为了做到这一点,我在 INSERT_DATE 列上定义了一个默认约束,默认情况下放置 GETDATE() 。
但是,我不希望数据提供程序应用程序覆盖此列值。
那么,如何禁用插入 INSERT_DATE 列?
(我无法使用计算列。因为聚集索引使用 INSERT_DATE 字段)
In Sql Server 2008, I have a table that is filled by a data provider application.
I want to keep an "INSERT_DATE" column on table, so that I can know the date the record is inserted.
In order to do this, I defined a default constraint on INSERT_DATE column which puts GETDATE() by default.
However, I don't want this column value to be overwritten by data provider application.
So, how can I disable insert into INSERT_DATE column?
(I cannot use computed column. Because Clustered Index uses INSERT_DATE field)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用插入后触发器 。这样,无论在插入行的该列中插入什么内容,您都可以更新为当前日期/时间。
You could use an After Insert trigger. That way, whatever is inserted into that column for an inserted row you could update to the current date/time.
当随后更新行时,您可能不希望列也更新。
最好的选择是使用
触发器
。如果应用程序提供了一个值,您可能无法抛出错误,但至少您可以通过跳过触发器中指定的插入中的列来正确设置它。You probably don't want the column updates as well when the row is subsequently updated.
Your best bet is to use a
trigger
. You might not be able to throw an error if the application provides a value but at least you will be able to set it right by skipping the column in the insert you specify in your trigger.