2010-08-26 22 views
52

Esiste un modo per trovare in SQL Server Management Studio stored procedure per nome o per parte del nome? (Il contesto di database attivo)Trova stored procedure per nome

Grazie per l'aiuto

risposta

92

È possibile utilizzare:

select * 
from 
    sys.procedures 
where 
    name like '%name_of_proc%' 

se è necessario il codice è possibile osservare nella tabella syscomments

select text 
from 
    syscomments c 
    inner join sys.procedures p on p.object_id = c.object_id 
where 
    p.name like '%name_of_proc%' 

Modifica Aggiornamento:

puoi anche utilizzare la versione standard ansi

SELECT * 
FROM 
    INFORMATION_SCHEMA.ROUTINES 
WHERE 
    ROUTINE_NAME LIKE '%name_of_proc%' 
+0

Se si desidera ottenere il testo della sp con il nome, è più semplice con l'uso "sp_helptext SPNAME" – Ali

35

Supponendo che siete in Esplora oggetti Dettagli (F7) che mostra l'elenco delle stored procedure, fare clic sul pulsante Filtri e inserire il nome (o il nome parziale).

alt text

+1

Grazie mille non sapevo della cosa filtro in qualche modo non ho mai visto quel pulsante. –

3

Questo funziona per tabelle e viste (tra l'altro), così, non solo sprocs:

SELECT 
    '[' + s.name + '].[' + o.Name + ']', 
    o.type_desc 
FROM 
    sys.objects o 
    JOIN sys.schemas s ON s.schema_id = o.schema_id 
WHERE 
    o.name = 'CreateAllTheThings' -- if you are certain of the exact name 
    OR o.name LIKE '%CreateAllThe%' -- if you are not so certain 

Vi dà anche il nome dello schema che sarà utile in qualsiasi non- database banale (ad esempio quello in cui è necessaria una query per trovare una stored procedure per nome).

+1

Migrando un'app legacy da sql 2005 a 2016 il mio script ha ottenuto "sintassi errata vicino a '@errorMessage', che non è stato di grande aiuto. Quando ho eseguito lo stesso sql in SSSM, è stato aggiunto "in procedure 'some_name'", ma non c'era alcuna stored procedure in alcun luogo! Si è rivelato un trigger e la tua richiesta l'ha trovato. Grazie! – mickeyf

0

Trucchetto molto accurato Mi imbatto in tentativi di SQL injection, in object explorer nella casella di ricerca basta usare i caratteri percentuali, e questo cercherà TUTTO le stored procedure, funzioni, viste, tabelle, schemi, indici ... I stanco di pensare di più :)

Search Pattern

1

È possibile utilizzare questa query:

SELECT 
    ROUTINE_CATALOG AS DatabaseName , 
    ROUTINE_SCHEMA AS SchemaName, 
    SPECIFIC_NAME AS SPName , 
    ROUTINE_DEFINITION AS SPBody , 
    CREATED AS CreatedDate, 
    LAST_ALTERED AS LastModificationDate 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE 
    (ROUTINE_DEFINITION LIKE '%%') 
    AND 
    (ROUTINE_TYPE='PROCEDURE') 
    AND 
    (SPECIFIC_NAME LIKE '%AssessmentToolDegreeDel') 

Come si può vedere, si può fare ricerca all'interno del corpo della stored procedure anche.

+0

@ardi, di nuovo sei qui! : <> – Ali