在sql server中的存储过程中列出存储过程

时间:2018-04-23 10:22:11

标签: sql sql-server-2008 stored-procedures

SQL存储过程使用了一些内部存储过程。所以我想在SQL server.in中使用SQL Server 2008获取所有内部使用的存储过程列表。请帮助找到此解决方案。

2 个答案:

答案 0 :(得分:0)

使用它来查找依赖

EXEC sp_depends @objName = N'Stored_Procedure_Name'

答案 1 :(得分:0)

您可以将information_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选项并删除&lt; 20谓词)

sp_depends已被弃用,目前可以提供错误答案。