ストアドプロシージャの場合、その完全なソースコードがあります。しかし、そのストアドプロシージャのnameは失われています。このデータベースには、何百ものストアドプロシージャがあります。
それで、コンテンツを使用するか、コンテンツの変数を使用して、ストアドプロシージャのnameを確認する方法はありますか?
これは私をとても困惑させています。助けていただければ幸いです。
これを試して:
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'
これは、少なくともsql 2008以降のバージョンで機能します。 フエンテ
このクエリを試すと、指定された単語またはフィールドを含むプロシージャ名が取得されます
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%'