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

时间:2009-09-01 20:38:45

标签: sql-server-2005 tsql

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

该列创建于:

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

然后改为:

 alter table sometable alter column somecolumn nchar(1) null

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

7 个答案:

答案 0 :(得分:43)

它是默认约束,您需要执行:

ALTER TABLE {TableName} 
DROP CONSTRAINT ConstraintName

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

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

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

答案 1 :(得分:12)

这就是我想出来的(在看到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个不同客户数据库的修改,因此脚本中没有一个一致的名称)

答案 2 :(得分:7)

如果您不知道约束名称

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

import { LoadingComponent } from './loading.component'

@NgModule({
imports: [
CommonModule
],
declarations: [LoadingComponent],
exports: [LoadingComponent]
})
export class LoadingModule { }

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

答案 3 :(得分:4)

select name from sys.default_constraints where name like '%first_3_chars_of_field_name%'

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

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

我也遇到了同样的问题,并以与您相同的方式更改了表并添加了默认值。但是上述解决方案均不能解决我的问题,因为尽管进行了几次刷新,但默认值未在约束列表中列出,但在插入表中时仍起作用。

我终于通过在SQL Management Studio中右键单击表名称并选择“设计”来解决了这个问题。然后,我删除了列属性中的默认值。

答案 6 :(得分:-3)

alter table <tablename> drop constraint <constraintname>

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