복붙노트

[SQL] SQL 서버 : 드롭 테이블 캐스케이드 동등한?

SQL

SQL 서버 : 드롭 테이블 캐스케이드 동등한?

오라클, 모든 테이블과 제약 당신이 뭔가를 같이 입력을 떨어 뜨리는

DROP TABLE myTable CASCADE CONSTRAINTS PURGE;

이것은 완전히 테이블과 종속성을 삭제합니다. SQL 서버와 동등한은 무엇입니까?

해결법

  1. ==============================

    1.나는 SQL은 유사 우아한 해결책을 가지고 있다고 생각하지 않습니다. 당신은 당신이 테이블을 삭제하기 전에 먼저 모든 관련 제약 조건을 삭제해야합니다.

    나는 SQL은 유사 우아한 해결책을 가지고 있다고 생각하지 않습니다. 당신은 당신이 테이블을 삭제하기 전에 먼저 모든 관련 제약 조건을 삭제해야합니다.

    다행히,이 모든 정보 스키마에 저장되며 당신은 당신의 구타 목록을 가져가 액세스 할 수 있습니다.

    이 블로그 포스트는 당신이 필요로 무엇을 얻을 수 있어야합니다 : http://weblogs.asp.net/jgalloway/archive/2006/04/12/442616.aspx

    -- t-sql scriptlet to drop all constraints on a table
    DECLARE @database nvarchar(50)
    DECLARE @table nvarchar(50)
    
    set @database = 'DatabaseName'
    set @table = 'TableName'
    
    DECLARE @sql nvarchar(255)
    WHILE EXISTS(select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and table_name = @table)
    BEGIN
        select    @sql = 'ALTER TABLE ' + @table + ' DROP CONSTRAINT ' + CONSTRAINT_NAME 
        from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
        where    constraint_catalog = @database and 
                table_name = @table
        exec    sp_executesql @sql
    END
    
  2. ==============================

    2.SQL Server 관리 Studio에서 옵션 / SQL 서버 개체 탐색기 / 스크립팅로 이동 가능 '종속 개체에 대한 스크립트를 생성'. 그런 다음 바로 새 쿼리 창>에 테이블, 스크립트> 드롭을 클릭하고 당신을 위해 그것을 생성합니다.

    SQL Server 관리 Studio에서 옵션 / SQL 서버 개체 탐색기 / 스크립팅로 이동 가능 '종속 개체에 대한 스크립트를 생성'. 그런 다음 바로 새 쿼리 창>에 테이블, 스크립트> 드롭을 클릭하고 당신을 위해 그것을 생성합니다.

  3. ==============================

    3.이 끔찍한의 솔루션이 될 수 있습니다,하지만 난 그게 빠르다 찾을 수 있습니다. 이 비니의 대답은 비슷하지만 SQL 문의 제품은 모든 제약과 테이블을 삭제 SQL 문의 또 다른 시리즈입니다.

    이 끔찍한의 솔루션이 될 수 있습니다,하지만 난 그게 빠르다 찾을 수 있습니다. 이 비니의 대답은 비슷하지만 SQL 문의 제품은 모든 제약과 테이블을 삭제 SQL 문의 또 다른 시리즈입니다.

    (
    select
      'ALTER TABLE ' + tc.table_name + ' DROP CONSTRAINT ' + tc.constraint_name + ';'
    from
      INFORMATION_SCHEMA.TABLES t
      ,INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
    where
      t.table_name = tc.table_name
      and tc.constraint_name not like '%_pk'
      and tc.constraint_name not like 'pk_%'
      and t.table_catalog='<schema>'
    ) UNION (
    select
      'DROP TABLE ' + t.table_name + ';'
    from
      INFORMATION_SCHEMA.TABLES t
    where
      t.table_catalog='<schema>'
    )
    
  4. ==============================

    4.일부 표는 테이블을 참조 할 때까지 모든 재미와 게임입니다 ...

    일부 표는 테이블을 참조 할 때까지 모든 재미와 게임입니다 ...

    그럼 난과 같이 제공되는 코드를 변경해야합니다 :

    CREATE PROCEDURE _cascadeConstraints @database nvarchar(30) = NULL, @table nvarchar(60) = NULL
    as
    DECLARE @sql nvarchar(255)
    WHILE EXISTS(select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and table_name = @table)
    BEGIN
        select    @sql = 'ALTER TABLE ' + @table + ' DROP CONSTRAINT ' + CONSTRAINT_NAME 
        from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
        where    constraint_catalog = @database and 
                table_name = @table
        select @sql = 'ALTER TABLE ' + tc.TABLE_NAME + ' DROP CONSTRAINT ' + tc.CONSTRAINT_NAME
          from INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc join
                      INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc on
                       (rc.CONSTRAINT_CATALOG = tc.CONSTRAINT_CATALOG and
                        rc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME) join
                      INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc_pk on
                       (tc_pk.CONSTRAINT_CATALOG = rc.CONSTRAINT_CATALOG and
                        tc_pk.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME)
         where tc.constraint_catalog = @database
           and tc_pk.TABLE_NAME = @table
        exec    sp_executesql @sql
    END
    go
    
  5. ==============================

    5.궁극적으로 우리는 우리의 테이블을 삭제합니다. 우리는 단순히 다음 명령 2를 실행 할 수 있습니다 :

    궁극적으로 우리는 우리의 테이블을 삭제합니다. 우리는 단순히 다음 명령 2를 실행 할 수 있습니다 :

    ALTER TABLE ... DROP CONSTRAINT ...

    DROP TABLE ...

    1> ALTER TABLE PRJ_DETAILS DROP CONSTRAINT FK_PRJ_TYPE;

    - 테이블 이름 및 제약 조건 이름 매개 변수입니다

    2> DROP TABLE.

    그 테이블과 연관된 이름을 가진 첫 번째 드롭 제약 두 번째는 테이블을 삭제할 수 있습니다.

    그것은 나하고 쉽게도 일했다.

  6. ==============================

    6.난 그냥 외래 키를 삭제 필요

    난 그냥 외래 키를 삭제 필요

    DECLARE @database nvarchar(50)
    DECLARE @TABLE_NAME nvarchar(250)
    DECLARE @CONSTRAINT_NAME nvarchar(250)
    DECLARE @sql nvarchar(350)
    set @database = 'XXX'
    
    
    DECLARE db_cursor CURSOR FOR  
    select TABLE_NAME, CONSTRAINT_NAME from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and CONSTRAINT_TYPE='FOREIGN KEY'
    
    OPEN db_cursor  
    FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @CONSTRAINT_NAME  
    
    WHILE @@FETCH_STATUS = 0  
    BEGIN  
    
        select    @sql = 'ALTER TABLE ' + @TABLE_NAME + ' DROP CONSTRAINT ' + @CONSTRAINT_NAME 
        from    INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
        where    constraint_catalog = @database and 
                table_name = @TABLE_NAME
        exec    sp_executesql @sql 
    
           FETCH NEXT FROM db_cursor INTO  @TABLE_NAME, @CONSTRAINT_NAME 
    END  
    
    CLOSE db_cursor  
    DEALLOCATE db_cursor 
    
  7. from https://stackoverflow.com/questions/4858488/sql-server-drop-table-cascade-equivalent by cc-by-sa and MIT license