sql设置默认值getdate()时,是否在运行update语句时设置了值?

时间:2012-06-07 13:19:17

标签: sql tsql

我知道当你在db中插入一个值时,它会将该列值设置为当前日期时间, 在运行更新语句时它是否适用于它?

e.g。

表架构:

Id, Name, CreatedDate(getdate())

当我插入表id = 1 , name = 'john'时,它会设置createdDate = current date

如果我运行更新声明

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

是否会更新createdDate

4 个答案:

答案 0 :(得分:6)

不,仅在INSERT上调用DEFAULT CONSTRAINT,并且仅当(a)与NOT NULL约束组合或(b)使用DEFAULT VALUES时才调用。对于UPDATE,SQL Server根本不会查看您的DEFAULT CONSTRAINT。目前您需要一个触发器(请参阅How do I add a "last updated" column in a SQL Server 2008 R2 table?),但有多个内置此功能的请求 - 请考虑投票和评论:

http://connect.microsoft.com/sql/feedback/details/355461

http://connect.microsoft.com/sql/feedback/details/406485

答案 1 :(得分:3)

哇 - 很难理解......

我认为没有根据线索。

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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