이준빈은 호박머리

IT 프로그래밍 개발 정보 블로그, 이준빈은 호박머리 입니다.

Database/MSSQL

MSSQL FOREIGN KEY 제약 조건에서 참조하므로 삭제할 수 없습니다.

준콩이 2015. 8. 18. 17:20
반응형


MSSQL의 테이블 삭제(DROP TABLE) 시 위와 같이 FOREIGN KEY 제약 조건에서 참조하므로 삭제할 수 없습니다. 라는 오류창 및 메시지를 확인할 수 있습니다.(※Foreign Key = 외래키)


이런 오류가 발생하는 원인은 삭제하려는 테이블이 다른 테이블과 KEY가 엮여 있기 때문에 제약조건(constraint)이 설정되어 있는 부분을 먼저 삭제 또는 변경하신 후 테이블 삭제가 진행이 되어야 하기 때문입니다.

아래 과정은 이런 상황에서 테이블을 삭제할 수 있는 방법입니다.



1. 먼저 위의 오류 메시지를 확인하기 위해 해당 테이블에서 마우스 오른쪽 클릭 후 삭제 버튼을 클릭합니다.



2. 확인 버튼을 클릭하여 해당 테이블 삭제를 시도합니다.

※ 1, 2번 과정없이 DROP TABLE 명령어로 직접 실행하셔도 됩니다. 

※ 운영중인 DB에서 바로 작업하지 마시고 테스트DB에서 먼저 작업해 보시길 권장드립니다.



3. DROP TABLE을 시도할 때 아래와 같이 삭제가 불가능하다는 메시지를 확인할 수 있습니다.



4. 더 자세한 정보를 보기 위해 종속성 표시 버튼을 클릭합니다.

이 화면에서는 삭제하려는 테이블이 기타 테이블과 제약조건이 설정되어 있는 상태를 확인할 수 있습니다.


[DeleteTest]에 종속된 개체를 클릭하시면 DeleteTest라는 테이블을 외래키로 지정하여 사용되고 있는(DeleteTest에 종속된) cnsrTestTable이라는 테이블이 있다는 것을 확인할 수 있습니다.


[Delete Test]이(가) 종속된 개체를 클릭하시면 위의 상황과는 반대로 DeleteTest 테이블에서 다른 테이블의 key를 외래키(Foreign Key)로 지정하여 사용하고 있는 테이블을 확인할 수 있습니다.


이는 외래키(Foreign Key)를 지정하되 어떤 테이블이 주가 되는지에 대한 차이입니다.



5. 이럴 경우 ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건 명령을 이용하여 제약조건을 삭제하든지

종속된 테이블을 DROP TABLE 테이블명 명령으로(또는 마우스 클릭으로 1, 2번과 같이 진행) 삭제하는 방법이 있습니다. 



6. 위와 같이 처리한 후 종속성을 조회해보면 4번화면 과 다르게 제약조건이 엮인 개체가 없는 것이 확인됩니다.



7. 다시 1번, 2번 과정과 같이 테이블 삭제를 다시 시도하시면 정상적으로 삭제되는 것을 확인할 수 있습니다.



반응형