13

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

では、その内容を使用するか、内容の変数のいずれかを使用して、ストアドプロシージャの名前を見つける方法はありますか?

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

4

5 に答える 5

26

これを試して:

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

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

于 2013-01-10T15:09:22.753 に答える
6

ストアドプロシージャのテキストが暗号化されていない場合、SQL Serverは、実際の名前が格納されているテーブルを参照しているフィールドsyscommentsとともに、プロシージャの全文をテーブルに保持します。idsysobjects

したがって、別の場所にある可能性が低い、ストアドプロシージャからいくつかの代表的な行を見つけて、次のようにします。

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

これにより、手作業で確認できるいくつかの手順が返されるはずです。

于 2013-01-10T15:16:16.813 に答える
2

より読みやすく、記憶に残る別のアプローチがあります。

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

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

于 2015-03-12T19:03:32.953 に答える
0

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

   SELECT Name 
        FROM sys.procedures 
        WHERE OBJECT_DEFINITION(object_id) LIKE '%Any-Field (OR) WORD%'
于 2013-01-10T15:11:42.007 に答える
0
select object_name(id) from syscomments where text like '%exec%'
于 2014-09-11T03:17:07.250 に答える