代码之家  ›  专栏  ›  技术社区  ›  Vinay Pandey

如何删除表上的所有默认约束约束

  •  7
  • Vinay Pandey  · 技术社区  · 15 年前

    如何删除属于SQL 2005中特定表的所有默认约束?

    3 回复  |  直到 11 年前
        1
  •  7
  •   gbn    15 年前

    一种解决方案 from a search :(为默认约束编辑)

    SET NOCOUNT ON
    
    DECLARE  @constraintname SYSNAME, @objectid int,
               @sqlcmd         VARCHAR(1024)
    
    DECLARE CONSTRAINTSCURSOR CURSOR  FOR
    SELECT NAME, object_id
    FROM   SYS.OBJECTS
    WHERE  TYPE = 'D' AND @objectid = OBJECT_ID('Mytable')
    
    OPEN CONSTRAINTSCURSOR
    
    FETCH NEXT FROM CONSTRAINTSCURSOR
    INTO @constraintname, @objectid
    
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
        SELECT @sqlcmd = 'ALTER TABLE ' + OBJECT_NAME(@objectid) + ' DROP CONSTRAINT ' + @constraintname
        EXEC( @sqlcmd)
        FETCH NEXT FROM CONSTRAINTSCURSOR
        INTO @constraintname, @objectid
    END
    
    CLOSE CONSTRAINTSCURSOR
    DEALLOCATE CONSTRAINTSCURSOR
    
        2
  •  5
  •   PabloInNZ    11 年前

    我知道这是旧的,但我只是在谷歌搜索时发现的。 下面是一个在SQL 2008(不确定2005年左右)中不使用光标的解决方案:

    declare @sql nvarchar(max)
    
    set @sql = ''
    
    select @sql = @sql + 'alter table YourTable drop constraint ' + name  + ';'
    from sys.default_constraints 
    where parent_object_id = object_id('YourTable')
    AND type = 'D'
    
    exec sp_executesql @sql
    
        3
  •  0
  •   HLGEM    15 年前

    你为什么要这么做?删除约束是一个非常激烈的操作,影响到所有用户,而不仅仅是您的流程。也许你的问题可以用其他方法解决。如果您不是系统的DBA,那么您应该仔细考虑是否应该这样做。(当然,在大多数系统中,DBA不允许任何其他人做这种事情。)