【问题标题】:How to use GETDATE without affecting the whole column如何在不影响整个列的情况下使用 GETDATE
【发布时间】:2015-10-23 00:26:46
【问题描述】:

我想使用默认功能:

[Date] date default GETDATE ()

我有一张大桌子,我只想让这段代码从现在开始,从桌子的开头开始。

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

【问题讨论】:

  • 第一行应该有什么日期?第二排?哪些列定义了行的顺序?

标签: sql-server tsql default-value


【解决方案1】:

别担心。如果未指定 WITH VALUES 选项,则该列将具有旧行的 NULL 值。根据official documentation

价值观

指定在 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 值仅对新行“有效”:

【讨论】:

  • 您好,我的专栏确实有日期。它们以日期时间格式化。但现在我希望列日期自动注册而不删除以前的数据。提前谢谢你:)
  • @Kalash 同样适用。如果不指定WITH VALUES 选项,向列添加默认值不会删除旧数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多