DataBase/MSSQL

[MSSQL] 특정 테이블 열을 참조하는 모든 외래키를 탐색하는 방법

범데이 2024. 7. 13. 13:20
728x90

SQL Server의 특정 테이블 열을 참조하는 모든 외래 키 제약 조건을 찾으려면 시스템 카탈로그 뷰를 쿼리하면 된다.

 

다음은 특정 테이블의 특정 열을 참조하는 모든 외래 키 제약 조건을 보여주는 쿼리 예시이다.

DECLARE @TableName NVARCHAR(128) = '';
DECLARE @ColumnName NVARCHAR(128) = '';

SELECT 
    fk.name AS ForeignKeyName,
    tp.name AS ParentTable,
    cp.name AS ParentColumn,
    tr.name AS ReferencedTable,
    cr.name AS ReferencedColumn
FROM 
    sys.foreign_keys AS fk
INNER JOIN 
    sys.foreign_key_columns AS fkc ON fk.object_id = fkc.constraint_object_id
INNER JOIN 
    sys.tables AS tp ON fkc.parent_object_id = tp.object_id
INNER JOIN 
    sys.columns AS cp ON fkc.parent_object_id = cp.object_id AND fkc.parent_column_id = cp.column_id
INNER JOIN 
    sys.tables AS tr ON fkc.referenced_object_id = tr.object_id
INNER JOIN 
    sys.columns AS cr ON fkc.referenced_object_id = cr.object_id AND fkc.referenced_column_id = cr.column_id
WHERE 
    tr.name = @TableName AND cr.name = @ColumnName;

 

해당 쿼리에 대한 설명은 다음과 같다

  • @TableName’ 은 테이블의 이름을 지정한다.
  • @ColumnName’ 은 테이블의 열 이름을 지정한다.
  • 쿼리는 여러 시스템 카탈로그 뷰(sys.foreign_keys, sys.foreign_key_columns, sys.tables, sys.columns)를 조인하여 지정된 테이블과 열을 참조하는 모든 외래 키를 찾는다.
  • 결과에는 외래 키 이름, 상위 테이블과 열(외래키가 정의된 위치), 참조된 테이블과 열이 포함된다.

 

[사용방법]

위의 설명과 같이 확인하려는 실제 테이블 및 열 이름을 '@TableName', '@ColumnName' 에 지정한다.

이 쿼리는 지정된 테이블의 지정된 열을 참조하는 모든 외래 키를 나열한다.

 

반응형