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

Kal*_*ash 1 t-sql sql-server default-value

我想使用默认功能:

[Date] date default GETDATE ()
Run Code Online (Sandbox Code Playgroud)

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

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

got*_*tqn 8

别担心.NULL如果WITH VALUES未指定选项,则该列将具有旧行的值.根据官方文件:

与价值观

指定DEFAULT constant_expression中给出的值存储在添加到现有行的新列中.如果添加的列允许空值并指定了WITH VALUES,则默认值将存储在新列中,并添加到现有行中.如果没有为允许空值的列指定WITH VALUES,则值NULL将存储在现有行的新列中.如果新列不允许空值,则无论是否指定了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
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述