我知道当你在db中插入一个值时,它会将该列值设置为当前日期时间, 在运行更新语句时它是否适用于它?
e.g。
表架构:
Id, Name, CreatedDate(getdate())
当我插入表id = 1 , name = 'john'
时,它会设置createdDate = current date
如果我运行更新声明
update table set name="john2" where id =1
是否会更新createdDate
?
答案 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?),但有多个内置此功能的请求 - 请考虑投票和评论:
答案 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() )