Comment trouver toutes les dépendances d'une table dans sql server

J'ai une base de données où j'ai la liste des tables,des procédures,des vues et des déclencheurs. Mais je veux qu'une requête obtienne toutes les dépendances d'une table, y compris les tables enfants qui font référence à la table parent.

21
demandé sur Axs 2014-02-25 09:49:21

11 réponses

Voici la façon de vérifier les dépendances

Méthode 1: utiliser sp_depends

 sp_depends 'dbo.First'
 GO

Méthode 2: Utiliser information_schema.routines

 SELECT *
 FROM information_schema.routines ISR
 WHERE CHARINDEX('dbo.First', ISR.ROUTINE_DEFINITION) > 0
 GO

Méthode 3: Utiliser DMV sys. dm_sql_referencing_entities

 SELECT referencing_schema_name, referencing_entity_name,
 referencing_id, referencing_class_desc, is_caller_dependent
 FROM sys.dm_sql_referencing_entities ('dbo.First', 'OBJECT');
 GO
43
répondu Mala 2014-02-25 06:03:10

Outre les méthodes décrites dans d'autres réponses (procédure stockée système sp_depends, fonctions de gestion dynamique SQL Server), vous pouvez également afficher les dépendances entre les objets SQL Server - à partir de SSMS.

Vous pouvez utiliser l'option View Dependencies de SSMS. Dans le volet Explorateur D'objets , cliquez avec le bouton droit sur l'objet et dans le menu contextuel, sélectionnez l'option Afficher les dépendances

Je préfère moi - même une visionneuse de dépendance tierce appelée ApexSQL Rechercher . Il s'agit d'un complément gratuit, qui s'intègre dans SSMS et Visual Studio pour la recherche de texte D'objet et de données SQL, la gestion de propriété étendue, le renommage d'objet sécurisé et la visualisation de relations.

9
répondu VosTi 2017-08-23 06:33:04

Dans SQL Server 2008, deux nouvelles fonctions de gestion dynamique sont introduites pour garder une trace des dépendances d'objets: sys.dm_sql_referenced_entities et sys. dm_sql_referencing_entities:

1/ rétablir les entités qui font référence à une entité donnée:

SELECT
        referencing_schema_name, referencing_entity_name, 
        referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('<TableName>', 'OBJECT')

2/ renvoyer des entités référencées par un objet:

SELECT
        referenced_schema_name, referenced_entity_name, referenced_minor_name, 
        referenced_class_desc, is_caller_dependent, is_ambiguous
FROM sys.dm_sql_referenced_entities ('<StoredProcedureName>', 'OBJECT');

Alternativement, vous pouvez utiliser sp_depends:

EXEC sp_depends '<TableName>'

Une autre option consiste à utiliser un joli outil utile appelé Dépendance SQL Tracker de Porte Rouge.

7
répondu Mihai Bejenariu 2017-03-31 06:47:18

Interroge la table sysdepends:

SELECT distinct schema_name(dependentObject.uid) as schema, 
       dependentObject.*
 FROM sysdepends d 
INNER JOIN sysobjects o on d.id = o.id 
INNER JOIN sysobjects dependentObject on d.depid = dependentObject.id
WHERE o.name = 'TableName'

Une façon de rechercher uniquement les vues / fonctions / déclencheurs / procédures qui référencent l'objet (ou tout texte donné) par son nom est:

SELECT distinct schema_name(so.uid) + '.' + so.name 
  FROM syscomments sc 
 INNER JOIN  sysobjects so on sc.id = so.id 
 WHERE sc.text like '%Name%'
5
répondu Leon Bambrick 2018-04-29 06:20:41

Recherche de toutes les clés étrangères

SELECT src.name, srcCol.name, dst.name, dstCol.name
FROM sys.foreign_key_columns fk
    INNER JOIN sys.columns srcCol ON fk.parent_column_id = srcCol.[column_id] 
        AND fk.parent_object_id = srcCol.[object_id]
    INNER JOIN sys.tables src ON src.[object_id] = fk.parent_object_id
    INNER JOIN sys.tables dst ON dst.[object_id] = fk.[referenced_object_id]
    INNER JOIN sys.columns dstCol ON fk.referenced_column_id = dstCol.[column_id] 
        AND fk.[referenced_object_id] = dstCol.[object_id]
3
répondu 2016-07-26 13:34:17

Méthode 1: utiliser sp_depends

 sp_depends 'dbo.First'
 GO

Méthode 2: Utilisation de sys.procédures pour les Procédures Stockées

select Name from sys.procedures where OBJECT_DEFINITION(OBJECT_ID) like '%Any Keyword Name%'

' % any Keyword Name % ' est le mot clé de recherche que vous recherchez

Méthode 3: Utilisation de sys.vues pour Vues

select Name from sys.views where OBJECT_DEFINITION(OBJECT_ID) like '%Any Keyword Name%'

' % any Keyword Name % ' est le mot clé de recherche que vous recherchez

1
répondu Darshit Shah 2014-02-25 07:43:39

Vous pouvez utiliser un outil gratuit appelé dépendances SQL Server avancées http://advancedsqlserverdependencies.codeplex.com/

Il prend en charge tous les objets de base de données (tables, vues, etc.) et peut trouver des dépendances sur plusieurs bases de données (en cas de synonymes).

1
répondu Miljan 2015-07-06 06:50:23
SELECT referencing_schema_name, referencing_entity_name,
case when is_caller_dependent=0 then 'NO' ELSE 'Yes'
END AS is_caller_dependent FROM sys.dm_sql_referencing_entities ('Tablename', 'OBJECT');
0
répondu Deepan Kanugula 2015-07-06 18:26:42

, j'ai écrit le code ci-dessous qui répertorie tous les objets où un mot clé donné sera trouvé. Formellement parlant, ce n'est pas une véritable recherche "dépend", mais elle aide plutôt à localiser où un mot-clé est utilisé dans les procédures stockées, les vues, Les déclencheurs et les fonctions. Utile si vous utilisez SQL dynamique.

select name, type_desc,create_date,modify_date from sys.all_objects o inner join sys.all_sql_modules m on m.object_id = o.object_id where definition like '%tableName %'
0
répondu Jean-François 2016-01-16 14:45:40

Cette question Est ancienne mais je pensais ajouter ici.. https://www.simple-talk.com/sql/t-sql-programming/dependencies-and-references-in-sql-server/ parle de différentes options avantages et inconvénients et fournit un proc stocké (It_Depends) qui produit un résultat arborescent de dépendances très similaires à SSMS

entrez la description de l'image ici

0
répondu Jack0fshad0ws 2017-03-22 00:40:27

Dans SQL Server 2008 ou supérieur, j'utilise la requête suivante pour trouver toutes les procédures stockées dépendantes, les fonctions définies par l'utilisateur, les déclencheurs, etc. pour une table donnée:

SELECT 
coalesce(Referenced_server_name+'.','')+ --possible server name if cross-server
coalesce(referenced_database_name+'.','')+ --possible database name if cross-database
coalesce(referenced_schema_name+'.','')+ --likely schema name
coalesce(referenced_entity_name,'') + --very likely entity name
coalesce('.'+col_name(referenced_ID,referenced_minor_id),'')AS [referencing],
coalesce(object_schema_name(Referencing_ID)+'.','')+ --likely schema name
object_name(Referencing_ID)+ --definite entity name
coalesce('.'+col_name(referencing_ID,referencing_minor_id),'') AS [referenced]
FROM sys.sql_expression_dependencies
WHERE referenced_id =object_id('Table_name')
ORDER BY [referenced]
0
répondu Aditya Landge 2018-04-20 12:41:50