キーワードでストアドプロシージャなどを検索する

キーワードでストアドプロシージャ (stored procedure) などを検索するには?

キーワードでストアードプロシジャーやファンクションなど検索したいような時ありますよね。

いろんな方法があるかもしれませんが、これは私が仕事中によく使うクエリーのひとつです。

キーワードでストアドプロシージャなどを検索するクエリー

SELECT   O.type,
         O.name,
         M.definition
FROM     sys.sql_modules AS M
           INNER JOIN sys.objects AS O
            ON M.object_id = O.object_id
WHERE    M.definition LIKE '%キーワード%'
ORDER BY O.type,
         O.name;

sys.objects の type はモジュールの型、 sys.objects の name はモジュールの名前、 sys.sql_modules の definition はそのモジュールの定義を返します。

以下のオブジェクトタイプが sql_modules の結果に含まれます。

P = SQL ストアド プロシージャ
RF = レプリケーション フィルター プロシージャ
V = ビュー
TR = SQL DML トリガー
FN = SQL スカラー関数
IF = SQL インライン テーブル値関数
TF = SQL テーブル値関数
R = ルール (旧形式、スタンドアロン)
D = DEFAULT (制約またはスタンドアロン)


ストアードプロシジャーとファンクションのみの場合、INFORMATION_SCHEMA.ROUTINES を使って以下のようにも検索できなくはないですが、ROUTINE_DEFINITION には定義の最初の 4000 文字しか含まれていません。

SELECT   ROUTINE_TYPE,
         ROUTINE_NAME,
         ROUTINE_DEFINITION
FROM     INFORMATION_SCHEMA.ROUTINES
WHERE    ROUTINE_DEFINITION LIKE '%キーワード%'
ORDER BY ROUTINE_TYPE,
         ROUTINE_NAME;

4000 文字よりも長い定義を持つストアードプロシジャーやファンクションで、キーワードが 4000 文字より後で使われている場合は結果に出てきませんのでご注意を!

© 2010-2024 SQL Server 入門