2009-12-22 35 views
17

我有一張表,我想添加一個位列,我希望默認爲所有現有數據爲false。如何將列添加到SQL Server中不允許空值的表中?

我該如何修改我的表格,以便在我爲現有行插入false之前允許指定NOT NULL?

我應該創建它爲空,做一個插入,而不是將它切換爲不可空?

+0

這是一種方法,是的。 – 2009-12-22 16:27:33

回答

41

您可以添加列,並提供用於所有現有的默認值行。

ALTER TABLE foo 
ADD bar bit 
DEFAULT 0 NOT NULL; 
+4

我通常喜歡NAME我的約束 - 即使默認約束 - 以防萬一我需要稍後放下它們。默認的「DF__TimeZones__IsUsa__3D5E1FD2」這個名字有點難以記住..... – 2009-12-22 17:08:07

0

我也這樣做了,就像你說的「創建它爲空,做一個插入而不是將它切換爲不可爲空」。我這樣做沒有問題。

我還不需要找到一個更好的辦法,但是我很好奇,如果有另一種方式....

0

我通常創建領域與你的情況更新了數據庫中的所有字段爲假默認爲可爲空之前然後切換爲null

1
ALTER TABLE dbo.MyTable ADD MyColumn bit NOT NULL DEFAULT 0 

對於什麼是值得的,您可以啓動企業管理器,在UI中進行更改,然後讓它生成一個更改腳本 - 您可以看到它將如何完成這些類型的任務。

3
ALTER TABLE foo ADD bar bit DEFAULT 0 NOT NULL WITH VALUES; 

「with values」子句將默認值移植到現有行中。

+1

@marc_s,我只是在沒有「WITH VALUES」的情況下爲我的位列運行它,它工作正常。你確定? – KingNestor 2009-12-22 16:55:45

+1

@KingNestor,使用默認值1來嘗試它,或者不是全部爲二進制零的東西。 – 2009-12-22 16:58:42

+4

WITH VALUES用於NULLABLE列的情況,您希望使用默認值而不是NULL。 – 2009-12-22 16:59:14

1

作爲所列答案的替代方案,還有另一種可能適合某些人的語法,例如,如果您使用「ReadyRoll」這樣的工具。

ALTER TABLE [dbo].[FOO] ADD BAR bit NOT NULL CONSTRAINT [df_Bar] DEFAULT 0 

退房this SO answer明白爲什麼命名您的約束(以上df_Bar)是很好的。

相關問題