我想修改表a某列的数据类型
但该列有一默认约束,所以必须删除该约束才能修改
测试了一下约束名有可能发生变化(即在a机器上为DF__tb_studen__isCad__300F11AC,但在b机器上为
DF__TB_Studen__isCad__7A721B0A )请问如何动态删除该约束???

解决方案 »

  1.   


    --查询约束
    select * from INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE
    where table_name='AA'select * from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE 
    where Table_name ='AA'select * from INFORMATION_SCHEMA.CHECK_CONSTRAINTS 
    where constraint_name ='CK_AA'declare @csname varchar(2000)set @csname = 'CK_AA'--禁用约束
    exec ('alter table AA nocheck constraint ' + @csname)
    --启用约束
    exec ('alter table AA check constraint ' + @csname)
      

  2.   

    请在建表的时候自行命名Check
      

  3.   

    谢谢:wangtiecheng(/+〆=ろ)
    请问 ck_AA如何的到?
      

  4.   

    谢谢:LouisXIV(夜游神) 
    因为牵涉到已有系统升级所以表不可能重建
      

  5.   

    --如果不知道默认值约束的名称,需要用SQL来取得:declare @csname varchar(100)
    set @csname=''select @csname=[name] --约束名称
    from sysobjects t
    where id=(select cdefault from syscolumns where id=object_id(N'表名') and name='字段名')--删掉约束
    exec('alter table 表名 drop constraint '+@csname)
    --禁用约束
    exec ('alter table 表名 nocheck constraint ' + @csname)
    --启用约束
    exec ('alter table 表名 check constraint ' + @csname)
      

  6.   

    非常感谢wangtiecheng(/+〆=ろ)。问题已解决