2013-01-10 17 views
12

Per una procedura memorizzata, dispongo del relativo codice sorgente completo. Tuttavia, il nome di di quella stored procedure è stato perso. In questo database ci sono centinaia di stored procedure.Trovare un nome di procedura memorizzato con il relativo contenuto in SQL Server 2000

Quindi c'è un modo in cui posso trovare il nome della stored procedure utilizzando il suo contenuto o utilizzando una delle variabili nei contenuti?

Questo mi sta confondendo molto. Un aiuto sarebbe sinceramente apprezzato.

risposta

26

Prova questa:

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

dove 'exec' è il testo che stai cercando. Questa query di vista la ricerca anche, appena cronaca

+0

@Melannie - Bingo! Ha funzionato. Grazie mille amico. – Kings

0

Prova questa ricerca otterrà il nome della procedura che contiene la parola data o campo

SELECT Name 
     FROM sys.procedures 
     WHERE OBJECT_DEFINITION(object_id) LIKE '%Any-Field (OR) WORD%' 
+3

sys.procedures non esiste su SQL 2000 – BStateham

+1

True. Il Probato menzionato è per SQL 2000 !! – Kings

6

Se il testo delle stored procedure non sono crittografati, SQL Server continua il testo completo della procedura nella tabella syscomments con un campo id che fa riferimento alla tabella sysobjects, in cui è memorizzato il nome effettivo.

Quindi, trovare qualche linea di rappresentante della stored procedure, che è improbabile che sia in un altro luogo, e lo fanno:

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 

Ciò dovrebbe restituire spera solo alcune procedure che si possono verificare a mano.

+0

anche questo è buono. Ma non è possibile selezionare più di una "risposta". Thnaks:) – Kings

+0

np, siamo contenti di poterti aiutare. – SWeko

0
select object_name(id) from syscomments where text like '%exec%' 
2

C'è un altro approccio, più leggibile e memorabile:

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

Questo funziona almeno in SQL 2008 e versioni più recenti. Fuente

Problemi correlati