2012-09-17 39 views
3

我是一个大量使用存储过程(500+)的公司的新手。为了帮助学习该系统,我希望有一种简单的方法来构建树型列表,该列表显示系统中的所有存储过程以及它们自己调用的存储过程...因此创建可以执行的存储过程的映射。有没有一种简单的方法通过SQL Server中的查询来完成此操作?有没有可以做到这一点的工具/实用工具?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 

我迄今发现搜索的唯一事情是:

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

要清楚,我期待通过在/选择存储过程的名称,并已退还给我它调用/使用的所有存储过程。

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

编辑/ UPDATE:

OK,我想试着和查询解决这个问题,但需要一些帮助。我“认为”我想要做的是查询sys.procedures以获取我系统中所有存储过程的名称。一旦我有他们,我想然后将它们传递到下面的查询,以确定从有多少存储过程被调用:

SELECT referenced_entity_name FROM sys.dm_sql_referenced_entities(@procname,“对象”)

在哪里@ProcName将传入由sys.procedures调用返回的每一行。

在t-sql(2008)中这样做的最有效方法是什么?

由于提前, 迈克尔

回答

1

你没有提到你正在工作的SQL Server版本。但RedGate有一个免费的实用程序(实际上是SSMS插件),名为SQL Search。 我有它在SSMS 2005,2008 R2和2012上工作

它应该解决您的问题。

+1

我使用SQL Server 2008的我没有意识到展鹏有任何免费工具。我会去看看。谢谢。! –

+0

请参阅上面包含的编辑。 –

+0

@MichaelLeone对不起,我误解了你的要求。我的印象是,你正在寻找一个工具/脚本,让你搜索特定的数据库对象(在你的情况下是一个SP),并显示该对象正在使用的地方的列表。 – JackLock

7

您可以在下面的代码输入特定的程序名称和检查,你会得到或他人使用的特定程序不

SELECT OBJECT_NAME(id) 
FROM syscomments 
WHERE [text] LIKE '% procedure_or_function_name %' 
GROUP BY OBJECT_NAME(id)