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视图的使用