如何在不影响整个列的情况下使用GETDATE

时间:2015-07-31 10:43:11

标签: sql-server tsql default-value

我想使用默认功能:

[Date] date default GETDATE ()

我有一个大表,我只希望这段代码从现在开始,从表的开头开始。

例如,如果我有一个包含4000行的表,然后我使用上面的代码,它将为所有4000行提供相同的日期,这正是我想要避免的。

1 个答案:

答案 0 :(得分:8)

别担心。如果未指定NULL选项,则该列的旧行将具有WITH VALUES值。根据{{​​3}}:

  

WITH VALUES

     

指定DEFAULT constant_expression中给出的值是   存储在添加到现有行的新列中。如果添加了列   允许空值并指定WITH VALUES,默认值为   存储在新列中,添加到现有行。如果WITH VALUES是   如果没有为允许空值的列指定,则存储值NULL   在现有行的新列中。如果新列不允许   nulls,默认值存储在新行中,无论是否   指定了WITH VALUES。

因此,当您添加新列时,将为所有现有行添加NULL值。

例如:

CREATE TABLE [dbo].[StackOverflowTB]
(
    [ID] TINYINT
);
GO

INSERT INTO [dbo].[StackOverflowTB] ([ID])
VALUES (1), (2), (3);
GO

ALTER TABLE [dbo].[StackOverflowTB]
ADD [Date] DATE DEFAULT(GETDATE())
GO

SELECT *
FROM [StackOverflowTB]
GO

INSERT INTO [dbo].[StackOverflowTB] ([ID])
VALUES (4);
GO

SELECT *
FROM [StackOverflowTB]
GO

DROP TABLE [dbo].[StackOverflowTB]
GO

从下面的屏幕截图中可以看出,default值仅适用于新行:

official documentation