将列添加到现有表中,对于现有记录,默认为sysdate;对于新条目,默认为明天

时间:2018-07-05 14:45:17

标签: sql sql-server

嗨,我在学习下面的任务时正在学习SQL,

在现有表中插入新列StartDate,对于现有记录应具有sysdate,对于新条目应具有明天的日期。

直到现在我做到了

ALTER TABLE test
ADD StartDate DATETIME NOT NULL DEFAULT (GETDATE());

从这里我无法前进,我认为任务本身是不正确的,我认为是正确的,还是我们可以执行此任务,请有人帮助我。

2 个答案:

答案 0 :(得分:2)

首先阅读肖恩(Sean)关于制作NULLABLE列的评论。然后,将命令更改为:

默认值应为dateadd(day,1,getdate())。对于将来的插入,如果您没有在插入上指定值,这将起作用。

ALTER TABLE test
ADD StartDate DATETIME NULL DEFAULT (DATEADD(DAY,1,GETDATE()));

对于其他行,只需更改此表即可更新。

update table test
set StartDate = getdate()
where StartDate is null --which is every row that wasn't inserted after the change

然后,更改列以使其NOT NULL

ALTER TABLE test
ALTER COLUMN StartDate DATETIME NOT NULL DEFAULT (DATEADD(DAY,1,GETDATE()));

答案 1 :(得分:0)

尝试一下:

ADD StartDate2 DATETIME NOT NULL DEFAULT (DATEADD(DAY, 1,GETDATE()));