Question

J'ai une énorme base de données avec des centaines de tables et de procédures stockées. À l’aide de SQL Server 2005, comment obtenir une liste des procédures stockées effectuant une opération d’insertion ou de mise à jour sur une table donnée.

Était-ce utile?

La solution

select
  so.name,
  sc.text
from
  sysobjects so inner join syscomments sc on so.id = sc.id
where
  sc.text like '%INSERT INTO xyz%'
  or sc.text like '%UPDATE xyz%'

Ceci vous donnera une liste de tous les contenus de procédures stockées avec INSERT ou UPDATE pour une table particulière (vous pouvez évidemment ajuster la requête en conséquence). De plus, les procédures plus longues seront fractionnées sur plusieurs lignes dans le jeu d’enregistrements renvoyé. Vous devrez donc peut-être effectuer une petite sélection manuelle des résultats.

Modifier : modification de la requête pour renvoyer le nom du fournisseur de services. Notez également que la requête ci-dessus renvoie tous les fichiers UDF ainsi que les SP.

Autres conseils

sys.sql_dependencies contient une liste d'entités avec des dépendances, y compris des tables et des colonnes qu'un sproc inclut dans les requêtes. Voir cette publication pour un exemple de requête générant des dépendances. L'extrait de code ci-dessous obtiendra une liste des dépendances table / colonne par procédure stockée

select sp.name       as sproc_name
      ,t.name        as table_name
      ,c.name        as column_name
 from sys.sql_dependencies d
 join sys.objects t
   on t.object_id = d.referenced_major_id
 join sys.objects sp
   on sp.object_id = d.object_id
 join sys.columns c
   on c.object_id = t.object_id
  and c.column_id = d.referenced_minor_id
where sp.type = 'P'

Utiliser sys.dm_sql_referencing_entities

Notez que sp_depends est obsolète.

Référence MSDN

Vous pouvez essayer d'exporter toutes vos procédures stockées dans un fichier texte, puis utiliser une recherche simple.

Une technique plus avancée consisterait à utiliser une recherche d'expression rationnelle pour trouver toutes les entrées SELECT FROM et INSERT FROM.

Cela semble fonctionner:

sélectionnez
so.name as [proc],
so2.name as [table],
sd.is_updated
de sysobjects donc
jointure interne sys.sql_dependencies sd sur so.id = sd.object_id
jointure interne sysobjects so2 sur sd.referenced_major_id = so2.id
où so.xtype = 'p' - procédure
et is_updated = 1 - table de mises à jour proc, ou du moins, je pense que c'est ce que cela signifie

Si vous téléchargez sp_search_code depuis le site Web de Vyaskn, vous pourrez rechercher du texte dans vos objets de base de données.

<>

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top