5

私は、ストアド プロシージャ (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

これまでに検索して見つけた唯一のものは次のとおりです。

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

明確にするために、私はストアド プロシージャ名を渡したり選択したりしようとしており、それが呼び出し/使用するすべてのストアド プロシージャを私に返しました。

@JackLock、SQL Search をダウンロードしてインストールしましたが、これで問題がどのように解決されるかわかりません。このツールはストアド プロシージャを名前で検索したり、ストアド プロシージャ内のテキストを検索したりするのに役立ちますが、特定のストアド プロシージャ内から呼び出されたすべてのストアド プロシージャを自動的に一覧表示するにはどうすればよいでしょうか? 多分私は何かを逃していますか?たとえば、上記の例では、渡したストアド プロシージャ名によって呼び出されるストアド プロシージャのリストを返すシステム クエリまたはツールを実行する機能が必要です。この例でクエリまたはツール「build_house」を指定すると、例の結果が返されます。

編集/更新:

OK、クエリでこれを解決したいのですが、助けが必要です。私がやりたいことは、sys.procedures にクエリを実行して、システム内のすべてのストアド プロシージャの名前を取得することです。それらを取得したら、それらを次のクエリに渡して、そこから呼び出されるストアド プロシージャの数を決定します。

SELECT referenced_entity_name
FROM sys.dm_sql_referenced_entities (@ProcName, 'OBJECT')

sys.procedures への呼び出しによって返される各行に対して @ProcName が渡される場所。

t-sql (2008) でこれを行う最も効率的な方法は何ですか?

前もってありがとう、マイケル

4

3 に答える 3

1

作業している SQL Server のバージョンについて言及していません。しかし、RedGate によるSQL Searchという無料のユーティリティ (実際には SSMS アドイン) があります。SSMS 2005、2008、R2、および2012で動作しています

それはあなたの問題を解決するはずです。

于 2012-09-17T19:04:10.263 に答える