반응형
반응형

인덱스 옵션 중에 IGNORE_DUP_KEY 라는 옵션이 있습니다. 이 옵션은 기본 모드가 중복 무시인 이기종 DBMS에서 SQL Server 2005로 마이그레이션하는 경우에 유용하게 사용할 수 있는 옵션이므로, 여러분에게 소개 드리고자 합니다.

IGONORE_DUP_KEY
옵션을 활성화하면 다중 INSERT 작업 중복 값이 들어올 오류가 아닌 경고 메시지를 반환하고 고유 인덱스에 위배되는 행만 INSERT에서 제외됩니다. 다른 문제만 없다면 고유 인덱스에 위배되지 않는 나머지 행들은 성공적으로 INSERT가 이루어집니다.
 
IGNORE_DUP_KEY 옵션을 비활성화한 상태에서는 고유 인덱스에 위배되는 행이 존재하면 오류 메시지가 반환되며 전체 INSERT 트랜잭션이 롤백됩니다.

참고로, 인덱스 옵션은 WITH 절을 사용하여 기술하며 SQL Server 2005의 구문은 SQL Server 2000의 구문과 조금 달라졌습니다. SQL Server 2005에서 새롭게 지원되는 인덱스 옵션은 WITH (option_name = ON}OFF) 을 사용해야만 지정할 수 있습니다. 설사 SQL Server 2000과 호환되는 옵션이더라도 새롭게 스크립트를 작성하거나 기존 스크립트를 수정하는 경우에는 SQL Server 2005의 구문을 준수하여 작성할 것을 권고합니다.

- SQL Server 2000 : WITH <index_option>
- SQL Server 2005 : WITH <index_option = ON | OFF>


다음에 IGNORE_DUP_KEY 옵션을 사용한 예제가 있습니다. 한번 따라해 보시면 쉽게 이해가 되실 겁니다.

-- 1. 테스트 테이블을 만듭니다.

CREATE TABLE #Test (C1 nvarchar(10), C2 nvarchar(50), C3 datetime);

GO

-- 2. 테스트 테이블에 IGNORE_DUP_KEY 옵션이 활성화된 인덱스를 생성합니다.

CREATE UNIQUE INDEX AK_Index ON #Test (C2)

    WITH (IGNORE_DUP_KEY = ON);

GO


-- 3. 하나의 일괄 처리(Batch) 안에서 Adventureworks.Production.UnitMeasure 테이블에 존재하는 행과 동일한 값을 가지는 한 행을 미리 INSERT 하고 Adventureworks.Production.UnitMeasure 테이블의 전체 데이터를 복사함으로써 중복  INSERT를 발생시킵니다. 오류 대신 경고 메시지가 반환되며 정상적으로 처리되는 것을 확인할 수 있습니다.
INSERT INTO #Test VALUES (N'OC', N'Ounces', GETDATE());

INSERT INTO #Test

SELECT * FROM Adventureworks.Production.UnitMeasure;

GO

/*

중복 키가 무시되었습니다.

*/

-- 클린업
DROP TABLE #Test;

GO

반응형

+ Recent posts

반응형