web-dev-qa-db-ja.com

ストアドプロシージャの全文で値を検索するにはどうすればよいですか?

特定の値を見つけたい場合は、次のスクリプトを使用してすべてのストアドプロシージャのテキストを検索します。

SELECT ROUTINE_NAME, ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE @searchText
ORDER BY ROUTINE_NAME   

私は最近ROUTINE_DEFINITIONは4000文字で停止するため、一部のプロシージャは本来あるべきときに返されませんでした。

ストアドプロシージャの全文に値を問い合わせるにはどうすればよいですか?

4
Rachel

BOLの_INFORMATION_SCHEMA.ROUTINES_から:

列名:_ROUTINE_DEFINITION_
データタイプ:nvarchar(4000)
説明:関数またはストアドプロシージャが暗号化されていない場合、関数またはストアドプロシージャの定義テキストの最初の4000文字を返します。それ以外の場合は、NULLを返します。完全な定義を確実に取得するには、 OBJECT_DEFINITION 関数または sys.sql_modules カタログビューの定義列をクエリします。

したがって、スクリプトを次のように変更することで、残りを表示できます。

_SELECT 
    ROUTINE_NAME, 
    ROUTINE_TYPE, 
    ROUTINE_DEFINITION as First4000, 
    OBJECT_DEFINITION(object_id(ROUTINE_NAME)) as FullDefinition
FROM 
    INFORMATION_SCHEMA.ROUTINES
WHERE 
    OBJECT_DEFINITION(object_id(ROUTINE_NAME)) LIKE @searchText
ORDER BY 
    ROUTINE_NAME
_

上記のFullDefinitionとしてエイリアスされた列は、残りのコンテンツをnvarchar(max)として返します。

5
RoKa

次のいずれかを使用

使用しない

  • INFORMATION_SCHEMA
  • sys.syscomments
7
gbn