我想获得一个在特定存储过程中使用的引用函数名列表。
我使用此查询来实现其中的大部分内容:
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 :(得分:0)
好的,最后我完成了以下查询:
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 的情况下,过程定义中引用的表必须退出。