SQL Server-ストアドプロシジャーのソースを表示する2

プログラミング SQL Server

過去の投稿「SQL Server-ストアドプロシジャーのソースを表示する1」で示した方法では
1つのストアドプロシジャーのソースしか表示できなかったので、Transact-SQLを使ってデータベース内の
すべてのものを取れないかと追加調査。

SELECT
   specific_name      AS proc_name
  ,routine_definition AS souce_code
FROM
  information_schema.routines
ORDER BY
  specific_name

と実行すればすべてのストアドプロシジャーのソースが表示できる。

しかしinformation_schema.routinesのHELPには

関数またはストアド プロシージャが暗号化されていない場合、
関数またはストアド プロシージャの定義テキストの
最初の 4,000 文字を返します。
それ以外の場合は NULL が返されます。
完全な定義を取得するには、OBJECT_DEFINITION関数または
sys.sql_modulesカタログビュー内のdefinition列に対して
クエリを実行します。

という記述があるので、長いストアドプロシジャーのソースは最後が
切れる可能性がるようです。

SELECT
   OBJECT_NAME(object_id) AS proc_name
  ,definition             AS souce_code
FROM
  sys.sql_modules
ORDER BY
  proc_name

とすればソースのすべてが取得できるのでこちらの方が良いかもしれませんね。
OBJECT_NAME()というTransact-SQLの関数も使ってます。

タイトルとURLをコピーしました