ストアドプロシージャの場合、完全なソースコードがあります。しかし、そのストアドプロシージャの名前は失われました。このデータベースには、何百ものストアドプロシージャがあります。
では、その内容を使用するか、内容の変数のいずれかを使用して、ストアドプロシージャの名前を見つける方法はありますか?
これは私をとても困惑させています。助けていただければ幸いです。
ストアドプロシージャの場合、完全なソースコードがあります。しかし、そのストアドプロシージャの名前は失われました。このデータベースには、何百ものストアドプロシージャがあります。
では、その内容を使用するか、内容の変数のいずれかを使用して、ストアドプロシージャの名前を見つける方法はありますか?
これは私をとても困惑させています。助けていただければ幸いです。
これを試して:
select * from sysobjects where id in
(select id from syscomments where text like '%exec%')
order by [name]
ここで、「exec」は検索しているテキストです。このクエリはビューも検索します。
ストアドプロシージャのテキストが暗号化されていない場合、SQL Serverは、実際の名前が格納されているテーブルを参照しているフィールドsyscomments
とともに、プロシージャの全文をテーブルに保持します。id
sysobjects
したがって、別の場所にある可能性が低い、ストアドプロシージャからいくつかの代表的な行を見つけて、次のようにします。
select o.name, c.text
from syscomments c
inner join sysobjects o on o.id = c.id
where c.text like '%<representative_line>%'
and o.type='P' -- this means filter procedures only
これにより、手作業で確認できるいくつかの手順が返されるはずです。
より読みやすく、記憶に残る別のアプローチがあります。
SELECT ROUTINE_NAME, ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%AlgunaPalabraQueTeAcuerdes%'
AND ROUTINE_TYPE='PROCEDURE'
これは、少なくともsql2008以降のバージョンでは機能します。フエンテ
このクエリを試してみると、指定された単語またはフィールドを含むプロシージャ名が取得されます
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(object_id) LIKE '%Any-Field (OR) WORD%'
select object_name(id) from syscomments where text like '%exec%'