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

Sql server 如何在不影响整个列的情况下使用GETDATE,sql-server,tsql,default-value,Sql Server,Tsql,Default Value,我想使用默认函数: [Date] date default GETDATE () 我有一个很大的表,我只希望这个代码从现在开始,从表的开头开始 例如,如果我有一个包含4000行的表,然后我使用上面的代码,它将为所有4000行提供相同的日期,这正是我想要避免的。不要担心。如果未指定带值的选项,则该列对于旧行将具有NULL值。根据: 有价值 指定默认常量_表达式中给定的值为 存储在添加到现有行的新列中。如果添加的列 允许空值,如果指定了值,则默认值为 存储在新列中,添加到现有行。如果具有值,则为

我想使用默认函数:

[Date] date default GETDATE ()
我有一个很大的表,我只希望这个代码从现在开始,从表的开头开始


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

不要担心。如果未指定带值的
选项,则该列对于旧行将具有
NULL
值。根据:

有价值

指定默认常量_表达式中给定的值为 存储在添加到现有行的新列中。如果添加的列 允许空值,如果指定了值,则默认值为 存储在新列中,添加到现有行。如果具有值,则为 如果未为允许空值的列指定,则存储空值 在现有行的新列中。如果新列不允许 如果为空,则默认值将存储在新行中,无论 指定的值

因此,当您添加新列时,将为所有现有行添加
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
从下面的屏幕截图中可以看到,
默认值
仅适用于新行:


别担心。如果未指定带值的
选项,则该列对于旧行将具有
NULL
值。根据:

有价值

指定默认常量_表达式中给定的值为 存储在添加到现有行的新列中。如果添加的列 允许空值,如果指定了值,则默认值为 存储在新列中,添加到现有行。如果具有值,则为 如果未为允许空值的列指定,则存储空值 在现有行的新列中。如果新列不允许 如果为空,则默认值将存储在新行中,无论 指定的值

因此,当您添加新列时,将为所有现有行添加
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
从下面的屏幕截图中可以看到,
默认值
仅适用于新行:


第一行应该有什么日期?第二排?哪些列定义了行的顺序?第一行应该有什么日期?第二排?哪些列定义了行的顺序?您好,我的列确实有日期。它们的格式是datetime。但现在我希望列日期自动注册,而不删除以前的数据。提前谢谢:)@Kalash同样适用。如果不指定带值的
选项,则向列添加默认值不会删除旧数据。您好,我的列确实有日期。它们的格式是datetime。但现在我希望列日期自动注册,而不删除以前的数据。提前谢谢:)@Kalash同样适用。如果未指定带值的
选项,则向列添加默认值不会删除旧数据。