如何更改列以删除默认值?
该列创建于:
ALTER table sometable Add somecolumn nchar(1) NOT NULL DEFAULT 'N'
然后改为:
alter table sometable alter column somecolumn nchar(1) null
允许空值,但默认值仍然存在。你怎么能删除它?
答案 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 { }
答案 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检查约束名称....希望这会有所帮助。