본문 바로가기

SQL/도움말 팁들!

FK 설정시 충돌이 발생했다? 무슨 이야기지?

테이블 설계 후 Foreign Key 제약사항을 정의 하고, 물리적 DB에 반영하려고 ALTER 문들을 실행하고 있는데 희안한 에러가 나오는 것이다.

 

 

메시지547, 수준16, 상태0, 1

ALTER TABLE 문이FOREIGN KEY 제약조건"FK_TABLE_COLUMN"() 충돌했습니다. 데이터베이스"    ", 테이블"dbo.    ", column '    '에서충돌이발생했습니다.

 

 

이건 뭔가 싶어 두 테이블을 비교해봤더니 둘다 데이터형도 똑같고 제약사항도 NOT NULL 로 동일한 것을 확인하였다.

 

구글링 결과 제약조건을 잡을 때 기존에 테이블에 들어있는 데이터들을 비교하여 부모 테이블의 PK를 잘못 참조하여 이미 기존에 들어간 값이 있다면 저렇게 충돌 메시지를 던져준단다.

 

부모-자식 간 기존 데이터가 충돌이 있어도 앞으로 데이터만 맞추겠다면 아래와 같은 옵션을 주면 된다.

 

 

 

ALTER TABLE tableanme

ADD CONSTRAINT FK_constraint_name

FOREIGN KEY (child_column)

REFERENCES parent_tablename(parent_column) --(X)

 

 

ALTER TABLE tableanme WITH NOCHECK

ADD CONSTRAINT FK_constraint_name

FOREIGN KEY (child_column)

REFERENCES parent_tablename(parent_column) --(O)