SQL Server:查找在过程中调用的存储过程

Mic*_*one 3 sql sql-server stored-procedures

我是一家大量使用存储过程(500+)的公司.为了帮助学习系统,我希望有一种简单的方法来构建一个树类型列表,显示系统中的所有存储过程以及它们自己调用的存储过程...从而创建可以执行的存储过程的映射.有没有一种简单的方法通过SQL Server中的查询来执行此操作?有没有可以做到这一点的工具/实用程序?

例如,我想看到以下类型的列表,而不必费心地尝试并遵循每个过程中的逻辑并手动创建列表.

build_house
  -->pour_foundation
    -->order_cement_truck
  -->frame_house
    -->hire_workers
    -->buy_nails_and_hammers
  -->wire_house
    -->hire_electricians
      -->check_certifications
    -->test_wiring
Run Code Online (Sandbox Code Playgroud)

到目前为止我唯一找到的搜索方式是:

http://www.codeproject.com/Articles/10019/Find-Stored-Procedures-called-within-a-procedure

为了清楚起见,我希望传入/选择一个存储过程名称,并将它调用/使用的所有存储过程都返回给我.

@JackLock,我下载并安装了SQL搜索,但我不知道这是如何解决我的问题的.此工具有助于按名称搜索存储过程,或在存储过程中搜索文本,但它如何帮助我自动列出从特定存储过程中调用的所有存储过程?也许我错过了什么?例如,在上面的示例中,我希望能够运行系统查询或工具,它返回一个存储过程列表,该列表由我传递的任何存储过程名称调用.所以在这个例子中,如果我给查询或工具"build_house"它返回示例中的结果.

编辑/ UPDATE:

好的,我想尝试用查询解决这个问题,但需要一些帮助.我"想"我想要做的是查询sys.procedures以获取我系统中所有存储过程的名称.一旦我拥有它们,我想将它们传递给以下查询以确定从中调用多少存储过程:

SELECT referenced_entity_name
FROM sys.dm_sql_referenced_entities (@ProcName, 'OBJECT')
Run Code Online (Sandbox Code Playgroud)

其中@ProcName将被传入sys.procedures调用返回的每一行.

在t-sql(2008)中执行此操作的最有效方法是什么?

迈克尔,提前谢谢

Ven*_*nki 8

您可以在下面的代码中输入特定的过程名称并检查,您将获得其他人使用的特定过程

SELECT OBJECT_NAME(id) 
FROM syscomments 
WHERE [text] LIKE '% procedure_or_function_name %' 
GROUP BY OBJECT_NAME(id)
Run Code Online (Sandbox Code Playgroud)


Jac*_*ock 1

您没有提到您正在使用哪个版本的 SQL Server。但是 RedGate 有一个名为SQL Search的免费实用程序(实际上是 SSMS 插件) 。我让它在 SSMS 2005、2008、R2 和 2012 上运行

它应该可以解决你的问题。