web-dev-qa-db-fra.com

Rechercher un nom de procédure stockée avec son contenu dans SQL Server 2000

Pour une procédure stockée, j'ai son code source complet. Mais le name de cette procédure stockée a été perdu. Dans cette base de données, il y a des centaines de procédures stockées.

Existe-t-il un moyen de connaître le name de la procédure stockée en utilisant son contenu ou en utilisant l'une des variables contenues dans le contenu?

Cela me rend souvent perplexe. Une aide serait sincerley appréciée.

13
Kings

Essaye ça:

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

où 'exec' est le texte que vous recherchez. Cette requête cherchera également les vues, juste pour

26
Melanie

Si les textes des procédures stockées ne sont pas chiffrés, Sql Server conserve le texte intégral de la procédure dans la table syscomments avec un champ id faisant référence à la table sysobjects, où le nom réel est stocké.

Donc, trouvez une ligne représentative dans la procédure stockée, qui ne se trouvera probablement pas ailleurs, et faites:

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

J'espère que cela ne renverra que quelques procédures que vous pourrez vérifier à la main.

6
SWeko

Il existe une autre approche, plus lisible et mémorable:

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

Cela fonctionne au moins dans SQL 2008 et les versions plus récentes. Fuente

2
Mario Raúl Pérez

Essayez cette requête, elle obtiendra le nom de la procédure qui contient le mot ou le champ donné

   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