如何从表中的列中删除默认值?

问题描述 投票:41回答:6

如何更改列以删除默认值?

该列创建时使用:

 ALTER table sometable Add somecolumn nchar(1) NOT NULL DEFAULT 'N'

然后改为:

 alter table sometable alter column somecolumn nchar(1) null

这允许空值,但默认值仍然存在。你怎么能删除它?

sql-server-2005 tsql
6个回答
45
投票

它是一个默认约束,你需要执行:

ALTER TABLE {TableName} 
DROP CONSTRAINT ConstraintName

如果在创建约束时未指定名称,则SQL Server会为您创建一个名称。您可以使用SQL Server Management Studio通过浏览到表,打开其树节点,然后打开“约束”节点来查找约束名称。

如果我没记错的话,约束将被命名为DF_SomeStuff_ColumnName。

编辑:Josh W.'s答案包含指向SO question的链接,该链接向您展示如何使用SQL而不是使用Management Studio界面查找自动生成的约束名称。


13
投票

这就是我想出来的(在看到Josh W.回答之前,实际上我看到了它但是它快速地撇去它我误解了它):

declare @name nvarchar(100)
select @name = [name] from sys.objects where type = 'D' and parent_object_id = object_id('sometable')

if (@name is not null)
  begin
     exec ('alter table [sometable] drop constraint [' + @name +']')
  end

我在这里的优点是我知道整个表只有一个这样的约束。如果有两个,那么我猜这就是你应该为它们命名的原因;)。

(问题在于这是对10个不同客户数据库的修改,因此在脚本中没有一个一致的名称)


7
投票

如果您不知道约束名称

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'__ColumnName__'
                        AND object_id = OBJECT_ID(N'__TableName__'))
IF @ConstraintName IS NOT NULL
EXEC('ALTER TABLE __TableName__ DROP CONSTRAINT ' + @ConstraintName)

https://stackoverflow.com/a/13715343/2547164


4
投票
select name from sys.default_constraints where name like '%first_3_chars_of_field_name%'

找到你的约束并使用DROP CONSTRAINT删除它。或者运行游标/ while循环以删除数据库中的所有类似默认值。


0
投票

如果您使用的是SQL Server Management Studio,这非常简单。

如果存在与表关联的多个约束并且您不想全部删除它们,请右键单击约束并选择“将脚本Cnstraint作为 - >创建到 - >新查询编辑器窗口”。这将显示创建约束的代码,包括列名和默认值。

然后只需右键单击要删除的约束,然后选择“删除”。


-3
投票
alter table <tablename> drop constraint <constraintname>

如果您不知道约束的名称,您可以使用sql server manangement studio检查约束名称....希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.