2010-10-08 125 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;