Yis*_*hai 48 t-sql sql-server-2005
如何更改列以删除默认值?
该列创建时使用:
ALTER table sometable Add somecolumn nchar(1) NOT NULL DEFAULT 'N'
Run Code Online (Sandbox Code Playgroud)
然后改为:
alter table sometable alter column somecolumn nchar(1) null
Run Code Online (Sandbox Code Playgroud)
这允许空值,但默认值仍然存在.你怎么能删除它?
Dan*_*gby 46
它是一个默认约束,你需要执行:
ALTER TABLE {TableName}
DROP CONSTRAINT ConstraintName
Run Code Online (Sandbox Code Playgroud)
如果在创建约束时未指定名称,则SQL Server会为您创建一个名称.您可以使用SQL Server Management Studio通过浏览到表,打开其树节点,然后打开"约束"节点来查找约束名称.
如果我没记错的话,约束将被命名为DF_SomeStuff_ColumnName.
编辑:Josh W.的答案包含一个SO问题的链接,该问题向您展示如何使用SQL而不是使用Management Studio界面查找自动生成的约束名称.
Yis*_*hai 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
Run Code Online (Sandbox Code Playgroud)
我在这里的优点是我知道整个表只有一个这样的约束.如果有两个,那么我猜这就是你应该为它们命名的原因;).
(问题在于这是对10个不同客户数据库的修改,因此在脚本中没有一个一致的名称)
如果您不知道约束名称
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)
Run Code Online (Sandbox Code Playgroud)
小智 6
select name from sys.default_constraints where name like '%first_3_chars_of_field_name%'
Run Code Online (Sandbox Code Playgroud)
找到您的约束并使用DROP CONSTRAINT
它来删除它。或者运行一个游标/while 循环来删除数据库中所有类似的默认值。