sql server默认约束可不能小看,它影响着我们的删除字段操作,可能会造成删除字段时报错。

在SQL Server 中,如果给表的一个字段设置了默认值,就会在系统表sysobjects中生成一个sql server默认约束。如果想删除这个设置了默认值的字段(假设此字段名column1),执行“ALTER TABLE table1 DROP COLUMN column1”时就会报错:

    Theobject'DF__xxxxxxxxxxx'isdependentoncolumn'column1'. ALTERTABLEDROPCOLUMNcolumn1failedbecauseoneormoreobjectsaccessthiscolumn.

所以在删除此字段时需要先将系统表中的对应默认约束删除, 可以使用下面的脚本进行删除sql server默认约束:

    DECLARE@tablenameVARCHAR(100),@columnnameVARCHAR(100),@tabVARCHAR(100) SET@tablename='CountryGroupEmailAndWaitAux'SET@columnname='actionOfHasNoValidEmail'declare@defnamevarchar(100) declare@cmdvarchar(100) select@defname=name FROMsysobjectsso JOINsysconstraintssc ONso.id=sc.constid WHEREobject_name(so.parent_obj)=@tablename ANDso.xtype='D'ANDsc.colid= (SELECTcolidFROMsyscolumns WHEREid=object_id(@tablename)AND name=@columnname) select@cmd='altertable'+@tablename+'dropconstraint'+@defname if@cmdisnullprint'Nodefaultconstrainttodrop' exec(@cmd)

在删除对应的默认约束后,执行:

    ALTERTABLEtable1DROPCOLUMNcolumn1

即可删除字段。

【编辑推荐】

SQL Server外关键字约束的定义

修改Sql Server唯一约束

sql server中动态sql语句的应用

SQL Server删除视图的两种方法

SQL Server视图的使用