2011-09-09 17 views
6

C'è un modo per trovare quali stored procedure creano una voce in una tabella. Diciamo per esempio:Trova stored procedure che inseriscono in una tabella specifica

stored procedure Una inserisce nella Tabella A
Stored Proceudre B Inserti in Tabella A
stored procedure C Inserti in Tabella B

voglio la query per restituire il nome della stored procedure A e Stored procedure B.

Ive ha questo ora, ma tutto ciò che fa è trovare stored procedure. Penso che sarebbe un buon punto di partenza per trovare le stored procedure.

 

select schema_name(schema_id) as [schema], 
     name 
from sys.procedures 
where name like '%Item%' and name like '%Create%' 
 

Sto usando Microsoft SQL 2008

risposta

9

È possibile cercare sys.sql_modules che contiene il testo di tutti i procs e punti di vista:

SELECT OBJECT_NAME(object_id) 
FROM sys.sql_modules 
WHERE definition LIKE '%TablenameIWanttoFind%' 

se si è certi del testo è possibile cercare qualcosa come 'INSERT INTO mytable'

+0

+1 'sys.sql_modules' è l'unica opinione che ha l'intera ** ** definizione della stored procedure (invece di' NVARCHAR (4000) '), quindi la sua davvero l'unica che si dovrebbe utilizzare in questo caso – Lamak

+0

Awesome thanks. Ad esempio, la stored procedure è crittografata. Questa funzione sarà ancora in grado di cercarla? – user489041

+0

@user - non sono sicuro, non l'ho mai provato. È probabile che non lo farà. – JNK

1

Perché non si utilizza la query di seguito.

select O.name from sysobjects O 
Join Syscomments C 
on O.id=C.id 
Where C.text like '%insert into%Table_name%' 

Da questa ricerca si può letteralmente trovare procedura di qualsiasi cosa con un testo specifico in esso.

0

La domanda chiede come trovare una stored procedure che inserisce in una tabella specifica.

La ricerca di stored procedure contenenti il ​​nome può comportare alcuni falsi positivi se si fa riferimento alla tabella per più selezioni.

sys.sql_dependencies è deprecato ma può essere utile qui poiché contiene un flag is_updated che è impostato su 1 per gli inserti.

SELECT QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + '.' + QUOTENAME(OBJECT_NAME(object_id)) 
FROM sys.sql_dependencies 
WHERE referenced_major_id = OBJECT_ID('YourTable') 
     AND is_updated = 1 
GROUP BY object_id 
Problemi correlati