2

I know when you insert a value into db, it set that column value as current datetime, does it apply to it when you run a update statement?

e.g.

table schema:

Id, Name, CreatedDate(getdate())

when i insert into table id = 1 , name = 'john' it will set createdDate = current date

if i run an update statement

update table set name="john2" where id =1

Will it update the createdDate?

4

4 回答 4

8

不,DEFAULT CONSTRAINT 仅在 INSERT 时调用,并且仅在 (a) 与 NOT NULL 约束结合或 (b) 使用 DEFAULT VALUES 时调用。对于 UPDATE,SQL Server 根本不会查看您的 DEFAULT CONSTRAINT。目前您需要一个触发器(请参阅如何在 SQL Server 2008 R2 表中添加“上次更新”列?),但是已经有多个请求要内置此功能。

我在博客中介绍了一种诱使 SQL Server 使用时态表执行此操作的方法:

但这充满了警告和限制,实际上只是在忽略其他多个类似的帖子:

于 2012-06-07T13:30:02.990 回答
4

哇-很难理解...

根据线索,我认为没有。

如果您在列中插入一条带有 NULL 的记录,并且该列定义了默认值,则将存储默认值而不是 null。

update 只会更新语句中指定的列。

除非您有一个执行特殊逻辑的触发器 - 在这种情况下,您需要查看触发器代码才能知道答案。

于 2012-06-07T13:23:25.770 回答
1

如果你的更新语句告诉你用 getfate() 更新一个列,但是如果你只是更新一个名称并且你有一个 createdate 列(它是用 getdate() 插入的),那么这些列不会受到影响。

于 2012-06-07T13:24:51.337 回答
0

您可以使用 DEFAULT 约束来实现这一点,就像我在下面的语句中使用 OrderDate 字段一样。

创建表订单(O_Id int NOT NULL,OrderNo int NOT NULL,P_Id int,OrderDate date DEFAULT GETDATE())

于 2016-03-11T17:52:31.833 回答