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