2010-10-08 126 views

回答

256
-- replace NVARCHAR(42) with the actual type of your column 
ALTER TABLE your_table 
ALTER COLUMN your_column NVARCHAR(42) NULL 
+2

或者只是'ALTER TABLE your_table ALTER COLUMN your_column NVARCHAR(42)',因爲如果沒有明確指定,它將默認允許空值。 – 2016-02-13 15:53:49

+0

注意,如果需要更改多列以允許爲null,那麼您將需要單獨執行'ALTER TABLE .. ALTER COLUMN ..'命令 – sonyisda1 2017-02-17 15:14:29

+1

請注意,有些情況下可能無法運行 - 請參閱[此DBA Stack Exchange答案] (https://dba.stackexchange.com/a/27293/158)如果您正在獲取'ALTER TABLE ALTER COLUMN失敗,因爲一個或多個對象訪問此列。' – 2017-09-06 19:09:28

20

ALTER TABLE是正確的:

ALTER TABLE MyCustomers ALTER COLUMN CompanyName VARCHAR(20) NULL 
+2

你確定你需要重新定義約束,而只是數據類型? [MSDN文章](http://msdn.microsoft.com/en-us/library/ms190273.aspx)沒有提到需要重新定義約束:「如果使用ALTER COLUMN指定NULL或NOT NULL, new_data_type [(precision [,scale])]也必須指定。如果數據類型,精度和比例沒有改變,請指定當前列值。 – 2010-10-08 11:34:09

+0

@Daniel Vassallo - 你說得對。我試圖完成,但更改NULL/NOT NULL應該是唯一的變化。 – Oded 2010-10-08 11:56:17

37

是的,你可以使用ALTER TABLE如下:

NULL可以ALTER COLUMN指定給力:

ALTER TABLE [table name] ALTER COLUMN [column name] [data type] NULL 

ALTER TABLE文件引用一個NOT NULL列以允許空值,但PRIMARY KEY約束中的列除外。

2
ALTER TABLE public.contract_termination_requests 
ALTER COLUMN management_company_id DROP NOT NULL; 
+1

這是我在PostgreSQL上運行的答案。 – 2016-01-18 09:56:46

+1

@ÁronLőrincz這個問題不是關於Postgres的。它被標記爲SQL Server,所以這個答案是不正確的。 – 2016-02-13 15:55:35

+0

你是對的,但它仍然對我有幫助,我認爲這對於通過Google查找問題的人來說是一個有用的評論。問題的標題並沒有說明它是關於哪個數據庫服務器。 – 2016-02-14 16:29:46

-1

可以使用

ALTER TABLE table_name ALTER COLUMN column-name DROP NOT NULL;