6

Existe-t-il un moyen de trouver quelles procédures stockées créent une entrée dans une table. Dites par exemple:Trouver la procédure stockée qui insère dans une table spécifique

procédure stockée A insère dans le tableau A
stockées Proceudre B insertions dans le tableau A
procédure stockée C insertions dans le tableau B

Je veux la requête pour renvoyer le nom de la procédure stockée A et procédure stockée B.

Je l'ai eu maintenant, mais tout ce qu'il fait est de trouver des procédures stockées. Je pense que ce serait un bon point de départ pour trouver les procédures stockées.

 

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

J'utilise Microsoft SQL 2008

Répondre

9

Vous pouvez effectuer une recherche sys.sql_modules qui contient le texte de tous les procs et vues:

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

Si vous êtes certain du texte que vous pouvez rechercher quelque chose comme 'INSERT INTO mytable'

+0

+1 'sys.sql_modules' est le seul point de vue qui ont toute la définition ** ** de la procédure stockée (au lieu de simplement' NVARCHAR (4000) '), de sorte que son vraiment le seul que vous devriez utiliser dans ce cas – Lamak

+0

Awesome thanks. Dites par exemple que la procédure stockée est cryptée. Cette fonction sera-t-elle toujours capable de la rechercher? – user489041

+0

@user - pas sûr, je ne l'ai jamais essayé. Ce n'est probablement pas le cas. – JNK

1

Pourquoi n'utilisez-vous pas la requête ci-dessous.

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

A partir de cette requête, vous pouvez littéralement trouver procédure de quoi que ce soit avec un texte spécifique en elle.

0

La question demande comment trouver une procédure stockée qui insère dans une table spécifique.

La recherche de procédures stockées contenant le nom peut ramener un certain nombre de faux positifs si la table est référencée pour de nombreuses sélections.

sys.sql_dependencies est obsolète mais peut être utile ici car il contient un indicateur is_updated qui est également défini sur 1 pour les insertions.

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 
Questions connexes