본문 바로가기
DB(sql)

MSSQL 외래키 등 제약조건으로 인해 삽입 안 될때 처리하는 방법

by doran365 2024. 8. 1.

MSSQL을 사용하는 과정에서 외래키 또는 다른 제약 조건으로 인해 데이터 삽입이 불가능할 때가 있습니다. 이러한 상황은 특히 벌크 데이터 또는 기존에 입력된 데이터의 무결성 문제로 인해 발생합니다. 이 글에서는 이러한 문제를 해결하기 위해 제약 조건을 잠시 비활성화하는 방법을 자세히 설명하겠습니다.

제약 조건의 비활성화와 필요성

1. 외래키 제약 조건 비활성화

외래키가 지정된 상태에서 데이터 삽입이 안되는 경우, 외래키 제약 조건을 잠시 비활성화하는 방법이 필요합니다. 이는 대량의 데이터를 삽입하거나 특정 작업을 수행할 때 유용합니다.

ALTER TABLE TB_Test NOCHECK CONSTRAINT FK_TB_Test_Sqno

위 명령어는 TB_Test 테이블의 FK_TB_Test_Sqno 외래키 제약 조건을 비활성화합니다.

2. 제약 조건을 비활성화하고 데이터 삽입

제약 조건을 비활성화한 후 데이터를 삽입하고 다시 제약 조건을 활성화할 수 있습니다. 이는 기존 데이터의 무결성을 유지하면서 새로운 데이터를 추가하는 데 유용합니다.

 
ALTER TABLE TB_Test
     NOCHECK CONSTRAINT FK_TB_Test_Sqno
GO
    INSERT INTO TB_Test VALUES (N'CC', N'AA', N'11', 200, 10)
    INSERT INTO TB_Test VALUES (N'DD', N'NN', N'234', 100, 5)
GO
ALTER TABLE TB_Test
    CHECK CONSTRAINT FK_TB_Test_Sqno

위 예제에서는 TB_Test테이블의 외래키 제약 조건을 비활성화한 후 데이터를 삽입하고, 다시 제약 조건을 활성화합니다.

제약 조건 비활성화의 장점

대량 데이터 삽입의 용이성

대량 데이터를 한 번에 삽입해야 하는 경우, 외래키 제약 조건이 걸려 있다면 작업이 번거로워질 수 있습니다. 이때 제약 조건을 잠시 비활성화하면 삽입 작업이 훨씬 수월해집니다.

기존 데이터 무결성 유지

제약 조건을 비활성화하면 기존 데이터의 무결성을 유지하면서도 새로운 데이터를 삽입할 수 있습니다. 이는 데이터베이스의 안정성을 높이는 데 중요합니다.

예제와 활용 방법

예제 1: 기존 데이터가 입력된 테이블에 제약 조건 추가

기존 데이터가 입력된 테이블에 새로운 외래키 제약 조건을 추가할 때, 기존 데이터의 무결성 문제로 인해 제약 조건을 추가할 수 없는 경우가 있습니다. 이럴 때는 다음과 같이 제약 조건을 추가할 수 있습니다.

ALTER TABLE TB_Test WITH NOCHECK
    ADD CONSTRAINT FK_TB_Test_Sqno
       FOREIGN KEY (UserGuid)
       REFERENCES userTbl(UserGuid)

예제 2: 제약 조건을 무시하고 데이터 삽입

제약 조건을 무시하고 데이터를 삽입한 후 다시 제약 조건을 활성화하는 방법은 다음과 같습니다.

ALTER TABLE TB_Test
     NOCHECK CONSTRAINT FK_TB_Test_Sqno
GO
    INSERT INTO TB_Test VALUES (N'aaa', N'11', N'123', 100, 2)
    INSERT INTO TB_Test VALUES (N'bb', N'22', N'123', 100, 2)
GO
ALTER TABLE TB_Test
    CHECK CONSTRAINT FK_TB_Test_Sqno

제약 조건 비활성화 시 주의사항

제약 조건을 비활성화하면 데이터 무결성이 일시적으로 보장되지 않을 수 있으므로, 작업이 완료된 후 반드시 제약 조건을 다시 활성화해야 합니다. 이를 통해 데이터베이스의 무결성을 유지할 수 있습니다.

외래키 제약 조건 활용 사례

실시간 데이터 처리

실시간으로 데이터가 입력되는 시스템에서는 외래키 제약 조건으로 인해 데이터 입력이 지연될 수 있습니다. 이럴 때는 특정 시간 동안 제약 조건을 비활성화하여 데이터를 빠르게 입력하고, 이후 제약 조건을 다시 활성화하여 무결성을 보장할 수 있습니다.

데이터 마이그레이션

대량의 데이터를 새로운 시스템으로 이전할 때, 외래키 제약 조건으로 인해 데이터 이전이 어려워질 수 있습니다. 이 경우, 제약 조건을 비활성화한 상태에서 데이터를 이전하고, 이후 제약 조건을 활성화하여 무결성을 검증할 수 있습니다.

결론

MSSQL에서 외래키 등 제약 조건으로 인해 데이터 삽입이 불가능한 경우, 제약 조건을 잠시 비활성화하는 방법을 활용하면 효율적으로 문제를 해결할 수 있습니다. 제약 조건을 비활성화하는 것은 데이터베이스의 무결성을 유지하면서도 대량 데이터를 빠르게 처리할 수 있는 유용한 방법입니다.

이 글에서 소개한 방법과 예제를 통해 MSSQL에서 제약 조건 비활성화를 효과적으로 활용해 보세요.