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已被弃用,目前确实有能力给出错误的答案。