새소식

DataBase/MSSQL

[MSSQL] 특정 테이블을 사용하는 프로시저 찾기

  • -

MSSQL에서 특정 테이블에서 사용되는 테이블 및 프로시저를 검색하거나

특정 테이블이 사용되는 프로시저를 검색하는 방법이 있습니다.

 

기존에는 sys.sysobjects 와 sys.syscomments를 조인하여 탐색을 했었는데

SQL SERVER에서 제공하는 시스템 테이블을 활용하면 보다 빠른 검색이 가능합니다.

 

바로 sys.dm_sql_referencing_entities 테이블 입니다.

 

간단하게 설명하자면 두 Entity 간의 (참조된 Entity, 참조한 Entity) 간에 SQL 문에 표시가 된 경우 해당 테이블에 데이터가 생성됩니다.

예를 들어 저장 프로시저가 지정된 참조 엔터티인 경우 이 함수는 테이블, 뷰, UDT(사용자 정의 형식), 또는 다른 저장 프로시저 등 이 저장 프로시저에서 참조되는 모든 사용자 정의 엔터티를 반환합니다.

 

 

특정 프로시저에서 사용되는 오브젝트를 탐색
SELECT DISTINCT referenced_entity_name  
  FROM sys.dm_sql_referenced_entities('dbo._SSLOrderInfoQuery', 'OBJECT')

 

 

특정 테이블을 참조하는 오브젝트를 탐색
SELECT DISTINCT referencing_entity_name 
  FROM sys.dm_sql_referencing_entities('dbo._TSLOrder', 'OBJECT')

 

추가로

해당 내용은 SQL Server 2008 이상에서만 사용이 가능하며 SQL Server 2008 - SQL Server 2012(11.x) 버전의 경우에는 Dm_sql_referencing_entities 객체에 SELECT 권한이 부여되어야 하기 때문에 아래 처럼 권한을 부여해 줍니다.

그 외 버전에서는 따로 작업은 필요없습니다.

 

GRANT SELECT ON sys.dm_sql_referencing_entities to UserName

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.