2016-09-27 176 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。

然而,在表中已有的行不會自動分配新的默認列值