web-dev-qa-db-ja.com

SQL Server 2000でその内容を含むストアドプロシージャ名を検索する

ストアドプロシージャの場合、その完全なソースコードがあります。しかし、そのストアドプロシージャのnameは失われています。このデータベースには、何百ものストアドプロシージャがあります。

それで、コンテンツを使用するか、コンテンツの変数を使用して、ストアドプロシージャのnameを確認する方法はありますか?

これは私をとても困惑させています。助けていただければ幸いです。

13
Kings

これを試して:

select * from sysobjects where id in 
(select id from syscomments where text like '%exec%')
order by [name]

ここで、「exec」は検索しているテキストです。このクエリは、ビューも検索します。

26
Melanie

ストアドプロシージャのテキストが暗号化されていない場合、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

うまくいけば、手作業で確認できるいくつかの手順が返されるはずです。

6
SWeko

より読みやすく覚えやすい別の方法があります。

SELECT ROUTINE_NAME, ROUTINE_DEFINITION 
    FROM INFORMATION_SCHEMA.ROUTINES 
    WHERE ROUTINE_DEFINITION LIKE '%AlgunaPalabraQueTeAcuerdes%' 
    AND ROUTINE_TYPE='PROCEDURE'

これは、少なくともsql 2008以降のバージョンで機能します。 フエンテ

2

このクエリを試すと、指定された単語またはフィールドを含むプロシージャ名が取得されます

   SELECT Name 
        FROM sys.procedures 
        WHERE OBJECT_DEFINITION(object_id) LIKE '%Any-Field (OR) Word%'
0
Pandian
select object_name(id) from syscomments where text like '%exec%'
0
Rakesh