获取存储过程

时间:2017-09-11 13:22:24

标签: sql-server sql-server-2012

我想获得一个在特定存储过程中使用的引用函数名列表。

我使用此查询来实现其中的大部分内容:

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';

我面临的一些场景中的问题是,在存储过程中创建了一些表。因此,如果未执行该过程,则上述语句将失败,表明未创建其余引用的对象。

是否有其他方法可以在存储过程中获取引用的函数?

1 个答案:

答案 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 的情况下,过程定义中引用的表必须退出。