Récupération des dépendances d’une vue ou d’une procédure stockée :

Les vues et procédures stockées c’est bien ! … Sauf quand on débarque sur un schéma que l’on ne connait pas.
Il y a bien moyen de voir les dépendances en faisant un clic droit dessus, mais le résultat est dans un wizard hiérarchisé, et tout recopier à la main : ce qui n’est pas très utilisable.

Il reste donc les tables « système ». Dans nôtre cas « sys.sql_dependencies » nous retourne les dépendances d’un objet.

Il est évidemment possible qu’une proc stoc/vue, fasse appel à d’autres objets, qui font appel à d’autres objets,… Dans ce cas, il nous faudra utiliser la récursivité des CTE pour retrouver les dépendances:

DECLARE @ObjectID as INT

SET @ObjectId=OBJECT_ID(‘MyProcedure’)

BEGIN WITH
DependentObjectCTE(DependentObjectID, DependentObjectName, ReferencedObjectName, ReferencedObjectID)
AS
(
SELECT DISTINCT 
	sd.object_id, 
	OBJECT_NAME(sd.object_id), 
	ReferencedObject = OBJECT_NAME(sd.referenced_major_id),
	ReferencedObjectID = sd.referenced_major_id
FROM
	sys.sql_dependencies sd
JOIN sys.objects so ON sd.referenced_major_id = so.object_id
WHERE
	sd.referenced_major_id = @ObjectID
UNION
ALL
SELECT 
	sd.object_id, 
	OBJECT_NAME(sd.object_id), 
	OBJECT_NAME(referenced_major_id), 
	object_id
FROM
	sys.sql_dependencies sd
	JOIN DependentObjectCTE do ON sd.referenced_major_id = do.DependentObjectID
WHERE
	sd.referenced_major_id <> sd.object_id
)
SELECT DISTINCT
	DependentObjectName
FROM
	DependentObjectCTE c
END

A noter que la table recense toutes les tables, procédures, fonctions, vues, types table…, mais ne peux pas prendre en compte les tables modifiées par les triggers. Il vous faudra donc faire un audit à part pour recenser ceux-ci.

La requête à l’avantage d’avoir un résultat en lignes, facilement utilisable dans des rapports, outils, ou même dans des fichiers Excel, ce qui permet de faire gagner pas mal de temps.

Pas de commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *