我想使用默认功能:
[Date] date default GETDATE ()
我有一个大表,我只希望这段代码从现在开始,从表的开头开始。
例如,如果我有一个包含4000行的表,然后我使用上面的代码,它将为所有4000行提供相同的日期,这正是我想要避免的。
答案 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
值仅适用于新行: