2016-09-27 180 views
1

我想改变一个现有的列并添加一个整数列。同时加入整数列我设置默认为10,但同时加入了列改变表'默认'不设置默认值 - SQL Server

ALTER TABLE dbo.Contacts ADD Col1 INT DEFAULT 10 

我需要做明确的更新脚本设置所有过去的记录为默认值,默认是没有设置

而如果列'not null',则所有记录默认为10。

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

为什么可以为空列设置默认值?在我的实际表中,我有近8.5亿个记录,而我的新列是可空列,我试图在ALTER表脚本之后避免更多更新。什么方式?

我想创建一个不可为空的列,默认值为10,并将约束再次改为NULL。这是好的方法吗?任何其他方式?

+1

的'default'手段的定义,它不能是'null'并没有价值'10'始终 – techspider

+2

试在'不可为空'的列添加'DEFAULT'来添加'WITH VALUES';如果你想更新现有的行 – techspider

回答

3

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

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

是'有价值'的工作很好...... –

+0

第二个查询它不是默认设置它是可空的列 –

+0

只是显示两个选项,所以你可以看到不同之处。删除以减少混淆并留下答案。 – dfundako

0

默认列值适用于在定义默认列值后插入到表中的新行。为了测试这个,试试像这样的INSERT命令。

INSERT INTO TableName col1 VALUES (col1_value) 

在此INSERT之后,对于插入的行,col2值应该为默认值10。

然而,在表中已有的行不会自动分配新的默认列值