更改表“DEFAULT”未设置默认值 - SQL Server

Kan*_*amy 3 sql-server sql-server-2012 sql-server-2016

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

ALTER TABLE dbo.Contacts ADD Col1 INT DEFAULT 10
Run Code Online (Sandbox Code Playgroud)

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

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

ALTER TABLE dbo.Contacts ADD Col2 INT NOT NULL DEFAULT 10
Run Code Online (Sandbox Code Playgroud)

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

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

dfu*_*ako 6

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

ALTER TABLE sales.orders 
ADD c1 INT DEFAULT 10 WITH VALUES
GO 
Run Code Online (Sandbox Code Playgroud)