SQL存储过程使用了一些内部存储过程。所以我想在SQL server.in中使用SQL Server 2008获取所有内部使用的存储过程列表。请帮助找到此解决方案。
答案 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已被弃用,目前可以提供错误答案。