2009-12-16 5 views
3

Je cherche exactement ce que Management Studio montre avec le menu "Afficher les dépendances".Écrire une requête qui retourne les dépendances d'un objet

  1. Management Studio connecté à SQL Server 2008
  2. Faites un clic droit sur un objet et choisissez « Afficher les dépendances »
  3. Maintenant, vous pouvez naviguer à travers les dépendances en arrière.

Comment obtenir la même information par programme? (une requête SQL?)

Répondre

4
Before you run the following query, replace <database_name> and <schema_name.function_name> with valid names 

USE <database_name>; 
GO 
SELECT OBJECT_NAME(object_id) AS referencing_object_name 
    ,COALESCE(COL_NAME(object_id, column_id), '(n/a)') AS referencing_column_name 
    ,* 
FROM sys.sql_dependencies 
WHERE referenced_major_id = OBJECT_ID('<schema_name.function_name>') 
ORDER BY OBJECT_NAME(object_id), COL_NAME(object_id, column_id); 
GO 
1

Jetez un coup d'œil aux métadonnées dans les tables sys et INFORMATION_SCHEMA. Il existe this answer, this answer et this answer, ce qui peut être utile.

+0

Oui ... Je l'ai vu plusieurs solutions ... mais je suis paresseux et que vous voulez la solution pare-balles sans le mien faire l'essai et l'erreur :-) – Nestor

+0

Pas de problème - vous avez demandé comment écrire une requête - ne pas m'en donner un! ;-) –

3

Voici une autre façon plus simple:

SELECT DISTINCT 
    O.ID , 
    O.Name AS TableName , 
    O.xtype 
    FROM 
    sysObjects O (NOLOCK) 
    INNER JOIN sysComments C (NOLOCK) ON O.ID = C.ID 
    WHERE 
    C.text LIKE '%<schema_name.function_name>%' 
    ORDER BY 
    XType , 
    TableName 
Before you run the following query, replace <schema_name.function_name> with a valid name 
1

Je sais que cette question est plus, mais je sais aussi que je regardais moi-même en venir avec ma propre solution. Plutôt que d'utiliser le sys.sql_dependencies obsolète, vous pouvez utiliser la fonction de table sys.dm_sql_referencing_entities.

La requête suivante appelle récursivement pour tracer les dépendances vers le bas, montrant chaque étape de la chaîne de dépendance:

DECLARE @table varchar(max); 
SET @table = 'schema.objectname'; 
;with 
DepsOn As (
    SELECT CAST(@table As varchar(max)) As parent 
     , CAST(l1.referencing_schema_name 
       + '.' 
       + l1.referencing_entity_name As varchar(max)) As child 
     , l1.referencing_class_desc As [description] 
     , 0 As Depth 
    FROM sys.dm_sql_referencing_entities(@table,'OBJECT') l1 
    UNION ALL 
    SELECT l2.child As parent 
     , cast(l2ca.referencing_schema_name 
       + '.' 
       + l2ca.referencing_entity_name As varchar(max)) As child 
     , l2ca.referencing_class_desc As [description] 
     , l2.Depth + 1 As Depth 
    FROM DepsOn l2 
    CROSS APPLY sys.dm_sql_referencing_entities(l2.child,'OBJECT') l2ca 
    ) 
SELECT * 
FROM DepsOn 
0

Testé Code. Je cours et aller de la ma sortie nécessaire

SELECT referencing_schema_name, referencing_entity_name, 
    referencing_id, referencing_class_desc, is_caller_dependent 
    FROM sys.dm_sql_referencing_entities ('dbo.yourobject', 'OBJECT'); 
    GO 

VishalDream

Questions connexes