2017-06-22 21 views
2

我使用MS SQL Server 2012的我有這個位SQL的:SQL Server爲什麼在某些環境中填充現有行中的新字段而不填充其他字段?

alter table SomeTable 
     add Active bit not null default 1 

在某些環境中的默認值應用到現有行,在其他環境中,我們必須添加的更新腳本來設置新字段設置爲1.自然,我在考慮差別是SQL Server設置,但我迄今爲止的搜索沒有提示哪一個。有什麼建議麼?

讓我知道是否需要特定設置的值。

編輯:在不應用默認值的環境中,現有行設置爲0,它至少符合NOT NULL。

+0

要添加到下面的答案中,您還可以將'with values'添加到'alter'以強制現有行更新爲默認值(如果其爲空)並跳過第二條語句。 – JiggsJedi

+1

如果向表中添加「not null」列,它不會僅使用空值創建它。這不能是你正在運行的代碼。 –

+1

它不會僅僅構成0的默認值。這必須是您的部署過程在SQL Server之外進行的其他工作。 –

回答

4

如果將該列添加爲not null它將被設置爲現有行的默認值。

如果將該列添加爲null,那麼儘管在向表中添加默認約束時,它仍然是null


例如:

create table SomeTable (id int); 
insert into SomeTable values (1); 

alter table SomeTable add Active_NotNull bit not null default 1; 
alter table SomeTable add Active_Null bit null default 1; 

select * from SomeTable; 

回報:

+----+----------------+-------------+ 
| id | Active_NotNull | Active_Null | 
+----+----------------+-------------+ 
| 1 |    1 | NULL  | 
+----+----------------+-------------+ 

dbfiddle.uk演示:http://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=c4aeea808684de48097ff44d391c9954

+0

我不得不閱讀第二行哈哈。優雅。 – scsimon

+0

這也是我的理解。但是我們有幾臺機器似乎沒有這樣的表現。那可能嗎? –

+0

我似乎記得在@MatthewNichols討論的場景中,在添加具有默認值的新列時,現有行違反了「非空」約束。 –

0

默認值將被應用到現有的行,以避免違反「NOT NULL「約束。