복붙노트

[SQL] 일시적으로 제약을 해제 (MS SQL)

SQL

일시적으로 제약을 해제 (MS SQL)

나는 일시적으로 모든 DB의 제약 조건 (예를 들어, 테이블 관계를) 해제 할 수있는 방법을 찾고 있어요.

나는 다른 DB에 (삽입을 사용하여) 하나 개의 DB의 테이블을 복사해야합니다. 나는 적절한 순서로 (관계의 균형에) 명령을 실행하여 그것을 달성 할 수있는 것을 알고있다.

나는 일시적으로 체크 제약을 해제하고 작업의 마무리 이후에 그것을 되돌릴 수 있다면 그러나 그것은 쉽게 될 것입니다.

이것이 가능한가?

해결법

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

    1.당신은 SQL 2005 +에서 FK 및 CHECK 제약 조건을 비활성화 할 수 있습니다. 참조 ALTER TABLE

    당신은 SQL 2005 +에서 FK 및 CHECK 제약 조건을 비활성화 할 수 있습니다. 참조 ALTER TABLE

    ALTER TABLE foo NOCHECK CONSTRAINT ALL
    

    또는

    ALTER TABLE foo NOCHECK CONSTRAINT CK_foo_column
    

    기본 키 및 고유 제한 조건은 비활성화 할 수 없습니다,하지만 난 제대로 이해 한 경우이 확인을해야합니다.

  2. ==============================

    2.

    -- Disable the constraints on a table called tableName:
    ALTER TABLE tableName NOCHECK CONSTRAINT ALL
    
    -- Re-enable the constraints on a table called tableName:
    ALTER TABLE tableName WITH CHECK CHECK CONSTRAINT ALL
    ---------------------------------------------------------
    
    -- Disable constraints for all tables:
    EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
    
    -- Re-enable constraints for all tables:
    EXEC sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all'
    ---------------------------------------------------------
    
  3. ==============================

    3.그리고, 당신은 당신이 즉 수표를 다시 무장 일단 당신이, 고아의 관계를 파괴 도입되지 않았는지 확인하려면

    그리고, 당신은 당신이 즉 수표를 다시 무장 일단 당신이, 고아의 관계를 파괴 도입되지 않았는지 확인하려면

    ALTER TABLE foo CHECK CONSTRAINT ALL
    

    또는

    ALTER TABLE foo CHECK CONSTRAINT FK_something
    

    당신은 다시 실행하고 그래서 같이 열을 확인에 대한 업데이 트를 수행 할 수 있습니다

    UPDATE myUpdatedTable SET someCol = someCol, fkCol = fkCol, etc = etc
    

    그리고 그 시점에서 오류가 충족 제약 오류로 인해됩니다.

  4. ==============================

    4.당신은 실제로 하나의 SQL 명령에서 모든 데이터베이스 제약 조건을 비활성화 할 수 있고, 그들이 또 다른 하나의 명령을 호출 재 활성화합니다. 보다:

    당신은 실제로 하나의 SQL 명령에서 모든 데이터베이스 제약 조건을 비활성화 할 수 있고, 그들이 또 다른 하나의 명령을 호출 재 활성화합니다. 보다:

    나는 현재 SQL Server 2005에서 함께 일하고 있지만 거의 확인이 방법이 아니라 SQL 2000와 함께 일한다는 생각

  5. ==============================

    5.비활성화 및 모든 외래 키를 사용

    비활성화 및 모든 외래 키를 사용

    CREATE PROCEDURE pr_Disable_Triggers_v2
        @disable BIT = 1
    AS
        DECLARE @sql VARCHAR(500)
            ,   @tableName VARCHAR(128)
            ,   @tableSchema VARCHAR(128)
    
        -- List of all tables
        DECLARE triggerCursor CURSOR FOR
            SELECT  t.TABLE_NAME AS TableName
                ,   t.TABLE_SCHEMA AS TableSchema
            FROM    INFORMATION_SCHEMA.TABLES t
            ORDER BY t.TABLE_NAME, t.TABLE_SCHEMA
    
        OPEN    triggerCursor
        FETCH NEXT FROM triggerCursor INTO @tableName, @tableSchema
        WHILE ( @@FETCH_STATUS = 0 )
        BEGIN
    
            SET @sql = 'ALTER TABLE ' + @tableSchema + '.[' + @tableName + '] '
            IF @disable = 1
                SET @sql = @sql + ' DISABLE TRIGGER ALL'
            ELSE
                SET @sql = @sql + ' ENABLE TRIGGER ALL'
    
            PRINT 'Executing Statement - ' + @sql
            EXECUTE ( @sql )
    
            FETCH NEXT FROM triggerCursor INTO @tableName, @tableSchema
    
        END
    
        CLOSE triggerCursor
        DEALLOCATE triggerCursor
    

    MSDN 매거진에서 제약 조건 및 트리거를 비활성화를 참조하십시오

  6. from https://stackoverflow.com/questions/737115/turn-off-constraints-temporarily-ms-sql by cc-by-sa and MIT license