2012-09-17 89 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)