在SQL Server中的存储过程中列出存储过程



sql存储过程使用了一些内部存储过程。因此,我想在sql server中的特定存储过程中获取所有内部使用的存储过程列表。我正在使用SQL Server 2008。请帮助找到帮助以找到这个解决方案。

使用它来查找依赖关系

exec sp_deppeds @objname = n'stored_procedure_name'

您可以使用Invoryation_schema.Routines与sys.sql_expression_dependencies结合使用 - 但是您需要以递归方式进行。

with recursedProcs(code_database, ancestorName, object, Recursion, procpath)    
as 
(
    select isr.specific_catalog as code_database, isr.[specific_name] as ancestorName, cast(isr.specific_name as varchar(200)) as object, 1 as Recursion, cast(isr.specific_name as varchar(200)) as procpath
    from information_schema.routines isr with (nolock)
    union all 
    select p.code_database, p.ancestorName,  cast(d.referenced_entity_name as varchar(200)), p.recursion + 1, cast(p.procpath + '/' + cast(d.referenced_entity_name as varchar(200)) as varchar(200)) 
    from recursedProcs p
    inner join sys.sql_expression_dependencies d on d.referencing_id = OBJECT_ID(p.object)
    where p.recursion < 20
    and d.referenced_id <> object_id(p.object)
)
select * from recursedProcs

这将通过子过程中的每个过程,最后归结到一个过程所依赖的表。从这个起点,您可以完善它以适合您的需求。(如果您的子过程深度超过20个级别,则还需要添加MaxRecursion选项并删除20个谓词(

sp_decteds已被弃用,目前确实有能力给出错误的答案。

最新更新