Comment obtenir une liste de tables affectées par un ensemble de procédures stockées?
-
02-07-2019 - |
Question
J'ai une énorme base de données avec une centaine de tables et quelque 250 procédures stockées. Je souhaite connaître la liste des tables affectées par un sous-ensemble de procédures stockées. Par exemple, j'ai une liste de 50 procédures stockées sur 250 et je souhaite connaître la liste des tables qui seront affectées par ces 50 procédures stockées. Existe-t-il un moyen simple de le faire, mis à part la lecture de toutes les procédures stockées et la recherche manuelle de la liste des tables?
PS: J'utilise des clients SQL Server 2000 et SQL Server 2005 pour cela.
La solution
Ce serait votre requête SQL Server:
SELECT
[NAME]
FROM
sysobjects
WHERE
xType = 'U' AND --specifies a user table object
id in
(
SELECT
sd.depid
FROM
sysobjects so,
sysdepends sd
WHERE
so.name = 'NameOfStoredProcedure' AND
sd.id = so.id
)
J'espère que cela aide quelqu'un.
Autres conseils
sp_depends 'StoredProcName' renvoie le nom et le type d'objet dont dépend la procédure stockée.
MODIFIER: J'aime mieux la réponse de @ KG. IMHO plus flexible.
Je le ferais de cette façon dans SQL 2005 (décommentez la ligne "AND" si vous le souhaitez uniquement pour un processus particulier):
SELECT
[Proc] = SCHEMA_NAME(p.schema_id) + '.' + p.name,
[Table] = SCHEMA_NAME(t.schema_id) + '.' + t.name,
[Column] = c.name,
d.is_selected,
d.is_updated
FROM sys.procedures p
INNER JOIN sys.sql_dependencies d
ON d.object_id = p.object_id
AND d.class IN (0,1)
INNER JOIN sys.tables t
ON t.object_id = d.referenced_major_id
INNER JOIN sys.columns c
ON c.object_id = t.object_id
AND c.column_id = d.referenced_minor_id
WHERE p.type IN ('P')
-- AND p.object_id = OBJECT_ID('MyProc')
ORDER BY
1, 2, 3
Une option très invasive consisterait à obtenir une base de données dupliquée et à définir un déclencheur sur chaque table qui enregistre un événement. Puis lancez tous les SP. Si vous ne pouvez pas faire beaucoup de mods à la base de données qui ne fonctionneront pas
Veillez également à ajouter la journalisation aux déclencheurs existants plutôt que de les remplacer par la journalisation si vous souhaitez également des tables sur lesquelles l'effet du SP passe par des déclencheurs.