2017-09-11 1 views
1

특정 저장 프로 시저 내에서 사용되는 참조 된 함수 이름의 목록을 가져오고 싶습니다. 나는이 직면하고 일부 시나리오에서저장 프로 시저 내에서 참조 된 함수 가져 오기

select 
    ROUTINE_DEFINITION 
from 
    sys.dm_sql_referenced_entities('[mac].[pr_custom_test_load]', 'OBJECT') sed 
inner join 
    SYS.OBJECTS so ON so.object_id = sed.REFERENCED_ID AND so.type = 'FN' AND sed.referenced_schema_name = 'mac' 
inner join 
    INFORMATION_SCHEMA.ROUTINES isr ON isr.ROUTINE_NAME=SED.referenced_entity_name AND ROUTINE_TYPE = 'FUNCTION'; 

문제, 저장 프로 시저 내에서 작성된 일부 테이블이 있습니다 :

은 그 대부분을 달성하기 위해이 쿼리를 사용했다. 따라서 프로 시저가 실행되지 않으면 위의 명령문은 참조 된 나머지 오브젝트가 작성되지 않았다는 사실을 알리는 데 실패합니다.

저장 프로 시저 내에서 참조 된 함수를 가져 오는 다른 방법이 있습니까?

답변

0

OK 마침내 나는 아래 쿼리를 수행 :

select ROUTINE_DEFINITION FROM sys.sql_expression_dependencies AS sed 
INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id AND sed.referenced_schema_name = 'mac' 
inner join INFORMATION_SCHEMA.ROUTINES isr ON isr.ROUTINE_NAME=SED.referenced_entity_name AND ROUTINE_TYPE = 'FUNCTION' 
WHERE referencing_id = OBJECT_ID('[mac].[pr_custom_test_load]'); 

프로 시저 정의에서 참조를 만들 수있는 참조 테이블이 필요하지 않습니다sys.sql_expression_dependencies를 사용. sys.dm_sql_referenced_entities의 경우 프로 시저 정의 내에서 참조되는 테이블이 종료되어야합니다.

관련 문제