如何删除不使用查询的sql服务器中的空约束

问题描述:

我想在不丢失数据的情况下删除sql server 2008中的非空约束。如何删除不使用查询的sql服务器中的空约束

ALTER TABLE YourTable ALTER COLUMN YourColumn columnType NULL 
+5

我发现我已经为包括YourColumn比如类型。 ALTER TABLE YourTable ALTER COLUMN YourColumn int NULL – 2011-06-28 01:16:46

+0

或者你可以这样做:alter table table_name modify column_name type(30)NULL。 30是你的列类型的大小,例如:varchar(30) – Nil 2012-09-19 18:11:28

+20

在postgres:'ALTER TABLE YourTable ALTER COLUMN YourColumn DROP NOT NULL' – Shane 2013-03-20 16:41:05

只为后人:

我宣布我的专栏名称,像这样:

ALTER TABLE <table_name> ADD <column_name> <datatype> NOT NULL DEFAULT 0 

要成功删除<列名>编程,你应该声明你的列如下所示:

ALTER TABLE <table_name> ADD <column_name> <data_type> NOT NULL CONSTRAINT <default_constraint_name> DEFAULT 0 

去掉<列名>:

  1. ALTER TABLE <table_name> DROP <default_constraint_name>
  2. ALTER TABLE <table_name> ALTER COLUMN <column_name> <data_type> NULL
  3. ALTER TABLE <table_name> DROP COLUMN <column_name>
+7

问题是关于删除非空约束,而不是删除列。 – Ben 2012-07-12 08:00:27

+1

如果您没有正确删除约束,则可能无法删除该列。 – Amalgovinus 2016-07-22 17:37:44

您应该删除任何约束之前删除NOT NULL列

DECLARE @ConstraintName nvarchar(200) 
SELECT @ConstraintName = Name 
FROM SYS.DEFAULT_CONSTRAINTS 
WHERE PARENT_OBJECT_ID = OBJECT_ID('<tableName>') 
     AND PARENT_COLUMN_ID = 
     (SELECT column_id 
      FROM sys.columns 
      WHERE NAME = N'<columnToDelete>' 
       AND object_id = OBJECT_ID(N'<columnToDelete>')) 
IF @ConstraintName IS NOT NULL 
EXEC('ALTER TABLE <tableNAme> DROP CONSTRAINT ' + @ConstraintName) 
IF EXISTS (SELECT * FROM syscolumns WHERE id=object_id('<TableName>') AND name='<columnToDelete>') 
EXEC('ALTER TABLE <tableName> DROP COLUMN <columnToDelete>') 

这对我的工作!

+1

问题是关于删除约束,而不是列。 – Martin 2015-05-18 11:04:08

删除约束not nullnull

ALTER TABLE 'test' CHANGE COLUMN 'testColumn' 'testColumn' datatype NULL; 
+0

为什么这个工作,而不是上述接受的答案为MySQL? – HopeKing 2018-02-13 08:47:17