zoukankan      html  css  js  c++  java
  • sql中删除某一列的约束(包括默认约束、主键约束、外键约束等)

    --删除某字段的所有关系
    
    DECLARE @tbname SYSNAME ,
        @fdname SYSNAME
    SELECT  @tbname = 't' --要处理的表名
            ,
            @fdname = 'a'
     --要处理的字段名
    
    --定义删除处理的语句
    DECLARE tb CURSOR local FOR
    --默认值约束
    SELECT sql='alter table ['+b.name+'] drop constraint ['+d.name+']'
    FROM syscolumns a
    JOIN sysobjects b ON a.id=b.id AND a.name=@fdname AND b.name=@tbname
    JOIN syscomments c ON a.cdefault=c.id
    JOIN sysobjects d ON c.id=d.id
    UNION --外键引用
    SELECT s='alter table ['+c.name+'] drop constraint ['+b.name+']'
    FROM sysforeignkeys a
    JOIN sysobjects b ON b.id=a.constid
    JOIN sysobjects c ON c.id=a.fkeyid
    JOIN syscolumns d ON d.id=c.id AND a.fkey=d.colid AND d.name=@fdname
    JOIN sysobjects e ON e.id=a.rkeyid AND e.name=@tbname
    JOIN syscolumns f ON f.id=e.id AND a.rkey=f.colid
    UNION --主键/唯一键/索引
    SELECT CASE WHEN e.xtype IN('PK','UQ') THEN 'alter table ['+c.name+'] drop constraint ['+e.name+']'
    ELSE 'drop index ['+c.name+'].['+a.name+']' END
    FROM sysindexes a
    JOIN sysindexkeys b ON a.id=b.id AND a.indid=b.indid
    JOIN sysobjects c ON b.id=c.id AND c.xtype='U' AND c.name=@tbname
    JOIN syscolumns d ON b.id=d.id AND b.colid=d.colid AND d.name=@fdname
    LEFT JOIN sysobjects e ON e.id=OBJECT_ID(a.name)
    WHERE a.indid NOT IN(0,255)
    
    --执行删除
    DECLARE @s VARCHAR(8000)
    OPEN tb
    FETCH NEXT FROM tb INTO @s
    WHILE @@fetch_status = 0 
        BEGIN
            EXEC(@s)
            FETCH NEXT FROM tb INTO @s
        END
    CLOSE tb
    DEALLOCATE tb
    

    (转自:鼠U猫

  • 相关阅读:
    第六章 Realm及相关对象(四) PrincipalCollection
    Java消息中间件的概述与JMS规范
    什么是红黑树?
    Mybatis逆向工程的pojo实现序列化接口的代码
    关于 Java 中 finally 语句块的深度辨析
    一道字符串变量对比值是否相等题
    java-网络编程
    java. io 流
    java.io.File 类的常用的方法
    list集合排序的两种方法
  • 原文地址:https://www.cnblogs.com/garyxiao/p/2916545.html
Copyright © 2011-2022 走看看