대량 가져오기 작업으로 제약 조건 검사 제어
업데이트: 2006년 12월 12일
데이터를 대량으로 가져올 때 대량 가져오기 작업에 의해 CHECK 및 FOREIGN KEY 제약 조건이 강제 적용되는지 여부를 제어할 수 있습니다. 제약 조건은 유효한 값을 정의하도록 열에 적용되는 비즈니스 규칙입니다. 예를 들어 전화 교환 번호가 있는 열에 대한 제약 조건에는 #### 형식이 필요할 수 있습니다. 제약 조건을 정의 및 검사하는 것은 데이터 무결성을 강제 적용하는 표준 메커니즘입니다. Microsoft에서는 일반적으로 증분 대량 가져오기 중 제약 조건 검사를 사용하는 것을 권장합니다.
제약 조건을 무시하려는 경우도 있을 수 있습니다. 예로 든 시나리오의 경우 제약 조건을 위반하는 행이 입력 데이터에 포함되는 경우입니다. 제약 조건을 무시하여 데이터를 로드한 다음 Transact-SQL 문을 사용하여 데이터를 정리할 수 있습니다.
대량 가져오기 작업을 수행하기 전에 테이블이 비어 있지 않은 경우 제약 조건의 유효성을 다시 검사하는 비용이 증분 데이터에 CHECK 및 FOREIGN KEY 제약 조건을 적용하는 비용을 초과할 수 있습니다. 문제가 있는 데이터를 가져온 후 Transact-SQL을 사용하여 가져온 데이터를 정리해야 합니다.
중요: |
---|
제약 조건이 비활성화되어 있을 때 스키마 수정 잠금이 사용되어 메타데이터를 업데이트할 수 있습니다. 이 경우 다른 명령(예: 온라인 인덱스 작성) 또는 트랜잭션을 방해할 수 있습니다. 예를 들어 동시 DDL 변경으로 인해 대상 테이블에 액세스하는 스냅숏 격리 트랜잭션이 실패할 수 있습니다. |
제약 조건에 대한 자세한 내용은 제약 조건을 참조하십시오.
대량 가져오기 작업 중 제약 조건 검사 동작은 해당 작업에 사용된 명령에 따라 달라집니다. 기본적으로 bcp 명령 및 BULK INSERT 문은 제약 조건을 무시합니다. 반대로 INSERT ... SELECT * FROM OPENROWSET(BULK...) 문의 경우에는 기본값이 제약 조건을 검사하는 것입니다.
다음 표에서는 대량 가져오기 명령의 기본 제약 조건 검사 동작을 요약하여 보여 줍니다.
명령 | 기본 동작 |
---|---|
bcp |
제약 조건 무시 |
BULK INSERT |
제약 조건 무시 |
INSERT ... SELECT * FROM OPENROWSET(BULK...) |
Check 제약 조건 |
각 대량 가져오기 명령은 다음 섹션에 설명된 바와 같이 제약 조건이 처리되는 방법을 변경할 수 있는 한정자를 제공합니다.
bcp 또는 BULK INSERT로 제약 조건 검사
기본적으로 제약 조건은 bcp 명령 또는 BULK INSERT 문에서 수행되는 대량 가져오기 작업 중 무시됩니다.
bcp 명령 및 BULK INSERT 문을 사용하면 대량 가져오기 작업 중 제약 조건이 강제 설정되도록 지정할 수 있습니다. 제약 조건의 강제 설정은 대량 가져오기 작업의 진행을 느리게 하지만 삽입된 모든 데이터가 기존의 제약 조건을 위반하지 않도록 합니다. 다음 표에서는 대량 가져오기 작업 중 제약 조건의 강제 설정을 지정하는 데 사용할 수 있는 한정자를 요약하여 보여 줍니다.
명령 | 한정자 | 한정자 유형 |
---|---|---|
bcp |
-h"CHECK_CONSTRAINTS" |
힌트 |
BULK INSERT |
CHECK_CONSTRAINTS |
Argument |
자세한 내용은 bcp 유틸리티 및 BULK INSERT(Transact-SQL)를 참조하십시오.
INSERT ... SELECT * FROM OPENROWSET(BULK...)의 제약 조건 무시
기본적으로 INSERT는 CHECK 및 FOREIGN KEY 제약 조건을 검사하지만 INSERT ... SELECT * FROM OPENROWSET(BULK...) 문을 사용하면 CHECK 및 FOREIGN KEY 제약 조건의 검사 내용을 덮어쓸 수 있습니다.
[!참고] UNIQUE, PRIMARY KEY 또는 NOT NULL 제약 조건은 비활성화할 수 없습니다.
다음 표에서는 CHECK 및 FOREIGN KEY 제약 조건을 무시하는 테이블 힌트를 요약하여 보여 줍니다.
명령 | 한정자 | 한정자 유형 |
---|---|---|
INSERT ... SELECT * FROM OPENROWSET(BULK...) |
WITH (IGNORE_CONSTRAINTS) |
테이블 힌트 |
다음은 이 한정자를 사용하는 방법을 보여 주는 예입니다. IGNORE_CONSTRAINTS 힌트에 대한 자세한 내용은 테이블 힌트(Transact-SQL)를 참조하십시오.
데이터를 가져왔는지 확인
대량 가져오기 작업 중 제약 조건을 무시하면 기존의 제약 조건을 위반하는 데이터가 테이블에 삽입될 수 있습니다. 그러므로 무시된 각 테이블 제약 조건은 sys.check_constraints 또는 sys.foreign_keys 카탈로그 뷰에 is_not_trusted로 표시됩니다. 어느 시점에서는 전체 테이블의 제약 조건을 확인할 필요가 있습니다.
제약 조건을 테스트하는 Transact-SQL 쿼리 또는 저장 프로시저로 가져온 데이터를 수동으로 검사하여 제약 조건을 위반하는 가져온 테이블 행을 식별할 수 있습니다.
참고 항목
관련 자료
bcp 유틸리티
BULK INSERT(Transact-SQL)
DBCC CHECKCONSTRAINTS(Transact-SQL)
INSERT(Transact-SQL)
OPENROWSET(Transact-SQL)
SELECT(Transact-SQL)
테이블 힌트(Transact-SQL)
도움말 및 정보
변경 내역
릴리스 | 내역 |
---|---|
2006년 12월 12일 |
|