[SQL] 일시적으로 제약을 해제 (MS SQL)
SQL일시적으로 제약을 해제 (MS SQL)
나는 일시적으로 모든 DB의 제약 조건 (예를 들어, 테이블 관계를) 해제 할 수있는 방법을 찾고 있어요.
나는 다른 DB에 (삽입을 사용하여) 하나 개의 DB의 테이블을 복사해야합니다. 나는 적절한 순서로 (관계의 균형에) 명령을 실행하여 그것을 달성 할 수있는 것을 알고있다.
나는 일시적으로 체크 제약을 해제하고 작업의 마무리 이후에 그것을 되돌릴 수 있다면 그러나 그것은 쉽게 될 것입니다.
이것이 가능한가?
해결법
-
==============================
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.
-- 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.그리고, 당신은 당신이 즉 수표를 다시 무장 일단 당신이, 고아의 관계를 파괴 도입되지 않았는지 확인하려면
그리고, 당신은 당신이 즉 수표를 다시 무장 일단 당신이, 고아의 관계를 파괴 도입되지 않았는지 확인하려면
ALTER TABLE foo CHECK CONSTRAINT ALL
또는
ALTER TABLE foo CHECK CONSTRAINT FK_something
당신은 다시 실행하고 그래서 같이 열을 확인에 대한 업데이 트를 수행 할 수 있습니다
UPDATE myUpdatedTable SET someCol = someCol, fkCol = fkCol, etc = etc
그리고 그 시점에서 오류가 충족 제약 오류로 인해됩니다.
-
==============================
4.당신은 실제로 하나의 SQL 명령에서 모든 데이터베이스 제약 조건을 비활성화 할 수 있고, 그들이 또 다른 하나의 명령을 호출 재 활성화합니다. 보다:
당신은 실제로 하나의 SQL 명령에서 모든 데이터베이스 제약 조건을 비활성화 할 수 있고, 그들이 또 다른 하나의 명령을 호출 재 활성화합니다. 보다:
나는 현재 SQL Server 2005에서 함께 일하고 있지만 거의 확인이 방법이 아니라 SQL 2000와 함께 일한다는 생각
-
==============================
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 매거진에서 제약 조건 및 트리거를 비활성화를 참조하십시오
from https://stackoverflow.com/questions/737115/turn-off-constraints-temporarily-ms-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 오라클의 테이블에서 열 이름을 얻을 수 있나요? (0) | 2020.03.28 |
---|---|
[SQL] 사용자 당 가장 최근 날짜를 선택 행 (0) | 2020.03.28 |
[SQL] MySQL은, 더 나은 NULL 또는 빈 문자열을 삽입하는? (0) | 2020.03.28 |
[SQL] 두 테이블 사이의 수익률 차이에 SQL 쿼리 (0) | 2020.03.27 |
[SQL] SQL 쿼리에 의해 특정 데이터베이스의 모든 테이블 이름을 얻기? (0) | 2020.03.27 |