2

ストアドプロシージャで使用される式のすべてのインスタンスを検索しようとしていますが、これがあります:

SELECT name, type_desc, create_date, modify_date
    FROM sys.procedures 
    WHERE OBJECT_DEFINITION(object_id) LIKE '%ufn_TurnFlagOn(5,ColumnA)%'
ORDER BY name

ただし、これは、次のような関数パラメーター間にスペースがある可能性のある sp を返しません。

ufn_TurnFlagOn( 5,ColumnA )
ufn_TurnFlagOn(5, ColumnA)
ufn_TurnFlagOn( 5,ColumnA)

ご注意ください:

  • このように「_」ワイルドカードを使用することはできません。これLIKE '%ufn_TurnFlagOn(_5_,_ColumnA_)%'は 1 文字に正確に一致するためです。したがって、一致 ufn_TurnFlagOn(5,ColumnA)しません。
  • 私は CLR 統合を持っていない (また、今すぐ登録することもできない) ため、正規表現を使用できません。

別の方法として、すべての可能性を考慮してクエリを複数回実行することもできますが、これを 1 つのクエリで実行するより良い方法はありますか?

4

1 に答える 1

3

スペースが唯一の問題である場合は、使用REPLACEしてそれらを削除し、次のようにすることができます。

WHERE REPLACE(OBJECT_DEFINITION(object_id), ' ', '') 
    LIKE '%ufn_TurnFlagOn(5,ColumnA)%'
于 2012-08-17T20:17:16.383 に答える