どのストアドプロシージャにテキストが含まれているかを調べようとしています(MS SQLのGrepのようなもの)。テーブルの名前を見つけて置き換えることができるようにします。
たとえば、データベース上のどのストアドプロシージャにテーブル名「clients_users」が含まれているかを調べたい場合
どのストアドプロシージャにテキストが含まれているかを調べようとしています(MS SQLのGrepのようなもの)。テーブルの名前を見つけて置き換えることができるようにします。
たとえば、データベース上のどのストアドプロシージャにテーブル名「clients_users」が含まれているかを調べたい場合
SQLServer2005以降の1つの方法
SELECT NAME
FROM sys.procedures
WHERE OBJECT_DEFINITION(object_id) LIKE '%clients[_]users%'
_はワイルドカード検索を行うときに任意の文字を意味するため、_の周りに[]が必要です
次のコードは、1つ以上の特定のテーブルに関連するすべてのストアドプロシージャ(SP)を見つけるのに役立ちます。sp_helpおよびsp_dependsは、常に正確な結果を返すとは限りません。
- - オプション1
SELECT DISTINCT so.name
FROM syscomments sc
INNER JOIN sysobjects so ON sc.id=so.id
WHERE sc.TEXT LIKE '%tablename%'
----オプション2
SELECT DISTINCT o.name, o.xtype
FROM syscomments c
INNER JOIN sysobjects o ON c.id=o.id
WHERE c.TEXT LIKE '%tablename%'
次のクエリを実行すると、必要な結果が得られます。foobarを、ストアドプロシージャで見つける必要のあるテキストに置き換えます。
SELECT ROUTINE_NAME, ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%foobar%'
AND ROUTINE_TYPE='PROCEDURE'