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.
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
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.
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
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%'
select object_name(id) from syscomments where text like '%exec%'