본문 바로가기
IT/MSSQL

[MSSQL] FOREIGN KEY 연결된 테이블,키 찾기 (FOREIGN KEY 제약 조건에서 참조하므로 삭제할 수 없습니다)

by 베베야 2021. 6. 16.
728x90

업무상 불필요하여 특정 테이블을 삭제하려고 하는데 다음과 같은 메시지가 나오면서

테이블이 삭제가 되지 않는 경우가 있습니다.


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

이럴 경우는 해당 테이블을 외래키로 참조하는 다른 테이블이 존재하고 있기 때문인데요.
외래키를 가지고 있는 테이블에 가서 키를 삭제하여 주시면 됩니다.

 


그런데 삭제 하려는 테이블의 외래키 제약조건은 sp_helpconstraint로 확인할 수 있지만 참조하는 다른 테이블은 확인이 불가능합니다.
이럴 때는 다음과 같이 하면 참조하고 있는 다른 테이블과 연결된 칼럼명을 확인할 수 있는 쿼리를 사용하면 되겠습니다.

1. 전체 PK, FK 조회하기

SELECT OBJECT_NAME(OBJECT_ID) AS NameofConstraint,
SCHEMA_NAME(schema_id) AS SchemaName,
OBJECT_NAME(parent_object_id) AS TableName,
type_desc AS ConstraintType
FROM sys.objects
WHERE type_desc IN ('FOREIGN_KEY_CONSTRAINT','PRIMARY_KEY_CONSTRAINT')
GO


2. 테이블에 연결된 FOREIGN KEY 제약 조건 찾기

SELECT f.name, OBJECT_NAME(f.parent_object_id) TableName, COL_NAME(fc.parent_object_id,fc.parent_column_id) ColName 
FROM sys.foreign_keys AS f INNER JOIN sys.foreign_key_columns AS fc 
ON f.OBJECT_ID = fc.constraint_object_id INNER JOIN sys.tables t 
ON t.OBJECT_ID = fc.referenced_object_id 
WHERE OBJECT_NAME (f.referenced_object_id) = '테이블명' 



이상으로 테이블 삭제시 'FOREIGN KEY 제약 조건에서 참조하므로 삭제할 수 없습니다.'라는 오류 메시지가 나타날 경우
해당 테이블에 연결될 FOREIGN KEY 제약조건을 찾는 방법에 대해서 알아보았습니다.

반응형
그리드형

댓글