【问题标题】:Alter Table 'DEFAULT' not setting default values - SQL Server更改表'DEFAULT'未设置默认值 - SQL Server
【发布时间】:2016-09-27 20:51:28
【问题描述】:

我正在尝试更改现有列并添加一个整数列。添加整数列时,我将 DEFAULT 设置为 10,但添加列时未设置默认值

ALTER TABLE dbo.Contacts ADD Col1 INT DEFAULT 10

我需要执行显式更新脚本来将所有过去的记录设置为默认值

而如果该列不为空,则所有记录的默认值为 10。

ALTER TABLE dbo.Contacts ADD Col2 INT NOT NULL DEFAULT 10

为什么可空列没有设置默认值?在我的实际表中,我有接近 8.5 亿条记录,并且我的新列是可为空的列,我试图避免在我的 ALTER 表脚本之后再进行一次更新。有什么办法?

我正在考虑创建默认为 10 的不可为空的列,然后再次将约束更改为 NULL。这是好方法吗?还有其他方法吗?

【问题讨论】:

  • default的定义意味着,它不能是null,而10总是有值
  • 尝试在 non-nullable 列中添加 WITH VALUES 以添加 DEFAULT;如果你想更新现有的行

标签: sql-server sql-server-2012 sql-server-2016


【解决方案1】:

您必须使用 WITH VALUES 来获取值而不是 null。在 2016 年使用 WideWorldImporters:

ALTER TABLE sales.orders 
ADD c1 INT DEFAULT 10 WITH VALUES
GO 

【讨论】:

  • 第二个查询它没有设置为默认为空列
  • 只是显示了两个选项,以便您可以看到差异。删除以减少混淆并只留下答案。
【解决方案2】:

在定义默认列值后,默认列值将应用于插入到表中的新行。要对此进行测试,请尝试这样的 INSERT 命令。

INSERT INTO TableName col1 VALUES (col1_value)

在此 INSERT 之后,col2 值应该获得插入行的默认值 10。

但是,表中的现有行不会自动获得新的默认列值

【讨论】:

    猜你喜欢
    • 2013-07-13
    • 2014-06-02
    • 2015-09-10
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    相关资源
    最近更新 更多