2010-09-22 28 views
96

在SQL Server中,我有一個表上的新列:我可以在SQL Server的添加列語句中創建一個命名的默認約束嗎?

ALTER TABLE t_tableName 
    ADD newColumn NOT NULL 

這是因爲我沒有指定指定一個默認約束NOT NULL失敗。該表不應該有一個默認約束。

爲了解決這個問題,我可以使用默認約束創建表,然後將其刪除。

但是,似乎沒有任何方法可以指定默認約束應該作爲此語句的一部分進行命名,所以我唯一能擺脫它的方法是讓存儲過程查找它sys.default_constraints表。

這對於可能發生很多事情的操作有點麻煩/冗長。有沒有人有更好的解決方案?

回答

149

這應該工作:

ALTER TABLE t_tableName 
    ADD newColumn VARCHAR(50) 
    CONSTRAINT YourContraintName DEFAULT '' NOT NULL 
+0

作品在2012年了。血淋淋的詳細信息:http://msdn.microsoft.com/en-us/library/ms187742.aspx – adam77 2012-11-16 23:35:06

1

我可以在沒有NOT NULL的情況下創建列,在現有日期上運行更新,然後將列更改爲NOT NULL。我擔心這會對性能產生影響,例如,如果它在數百萬行的表上,所以這看起來不太理想。

53
ALTER TABLE t_tableName 
    ADD newColumn int NOT NULL 
     CONSTRAINT DF_defaultvalue DEFAULT (1) 
+12

我更喜歡這個接受的答案,因爲我可以放棄默認約束,而不用擔心失去NOT NULL約束。 – EleventhDoctor 2014-09-02 12:22:54

+4

@EleventhDoctor這沒有任何意義。 NOT NULL不是約束的一部分,drop語句只是引用約束名稱 – 2016-03-29 00:07:24

+4

@RogerWillcocks你是對的,但是在閱讀NOT NULL與約束分離後更清楚。 – deluxxxe 2017-01-26 15:47:00

相關問題