sys.dm_sql_referencing_entities (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance

Retourne une ligne pour chaque entité dans la base de données actuelle qui référence une autre entité définie par l'utilisateur par nom. Une dépendance entre deux entités est créée lorsqu’une entité, appelée entité référencée, apparaît par nom dans une expression SQL rendue persistante d’une autre entité, appelée entité de référence. Par exemple, si un type défini par l'utilisateur est spécifié comme entité référencée, cette fonction retourne chaque entité définie par l'utilisateur qui référence ce type par nom dans sa définition. La fonction ne retourne pas les entités dans d'autres bases de données qui peuvent référencer l'entité spécifiée. Cette fonction doit être exécutée dans le contexte de la base de données master pour retourner un déclencheur DDL au niveau du serveur comme une entité de référence.

Vous pouvez utiliser cette fonction de gestion dynamique pour établir un rapport sur les types d'entités suivants dans la base de données actuelle qui référencent l'entité spécifiée :

  • Entités liées au schéma ou non liées au schéma

  • Déclencheurs DDL au niveau de la base de données

  • Déclencheurs DDL au niveau du serveur

S’applique à : SQL Server ( SQL Server 2008 (10.0.x) et versions ultérieures), SQL Database.

Conventions de la syntaxe Transact-SQL

Syntaxe

sys.dm_sql_referencing_entities (  
    ' schema_name.referenced_entity_name ' , ' <referenced_class> ' )  
  
<referenced_class> ::=  
{  
    OBJECT  
  | TYPE  
  | XML_SCHEMA_COLLECTION  
  | PARTITION_FUNCTION  
}  

Arguments

schema_name.referenced_entity_name Nom de l’entité référencée.

schema_name est obligatoire, sauf lorsque la classe référencée est PARTITION_FUNCTION.

schema_name.referenced_entity_name est nvarchar(517).

<referenced_class> ::= { OBJECT | TYPE | XML_SCHEMA_COLLECTION | PARTITION_FUNCTION } Classe de l’entité référencée. Une seule classe peut être spécifiée par instruction.

<referenced_class> est nvarchar(60).

Table retournée

Nom de la colonne Type de données Description
referencing_schema_name sysname Schéma auquel l'entité de référence appartient. Autorise la valeur NULL.

NULL pour les déclencheurs DDL au niveau de la base de données et au niveau du serveur.
referencing_entity_name sysname Nom de l’entité de référencement. N'accepte pas la valeur NULL.
referencing_id int ID de l'entité de référence. N'accepte pas la valeur NULL.
referencing_class tinyint Classe de l'entité de référence. N'accepte pas la valeur NULL.

1 = objet

12 = déclencheur DDL au niveau de la base de données

13 = déclencheur DDL au niveau du serveur
referencing_class_desc nvarchar(60) Description de la classe de référencement d’entité.

OBJECT

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER
is_caller_dependent bit Indique que la résolution de l'ID d'entité référencée se produit au moment de l'exécution, car elle dépend du schéma de l'appelant.

1 = l'entité de référence a la possibilité de référencer l'entité ; toutefois, la résolution de l'ID d'entité référencée dépend de l'appelant et ne peut pas être déterminée. Cela se produit uniquement pour les références non liées au schéma à une procédure stockée, procédure stockée étendue ou fonction définie par l'utilisateur appelée dans une instruction EXECUTE.

0 = l'entité référencée ne dépend pas de l'appelant.

Exceptions

Retourne un jeu de résultats vide sous chacune des conditions suivantes :

  • Un objet système est spécifié.

  • L'entité spécifiée n'existe pas dans la base de données active.

  • L'entité spécifiée ne référence pas d'autres entités.

  • Un paramètre non valide est passé.

Retourne une erreur lorsque l'entité référencée spécifiée est une procédure stockée numérotée.

Notes

Le tableau suivant répertorie les types des entités pour lesquelles les informations de dépendance sont créées et gérées. Les informations de dépendance ne sont pas créées ni gérées pour les règles, les valeurs par défaut, les tables temporaires, les procédures stockées temporaires ou les objets système.

Type d'entité Entité de référence Entité référencée
Table Oui* Oui
Affichage Oui Oui
Procédure stockée Transact-SQL** Oui Oui
Procédure stockée CLR Non Oui
Fonctions Transact-SQL définies par l’utilisateur Oui Oui
Fonction CLR définie par l'utilisateur Non Oui
Déclencheur CLR (DML et DDL) Non Non
Déclencheur Transact-SQL DML Oui Non
Déclencheur DDL au niveau de la base de données Transact-SQL Oui Non
Déclencheur DDL au niveau du serveur Transact-SQL Oui Non
Procédures stockées étendues Non Oui
File d'attente Non Oui
Synonyme Non Oui
Type (alias et type CLR défini par l'utilisateur) Non Oui
Collection de schémas XML Non Oui
Fonction de partition Non Oui

* Une table est suivie comme entité de référence uniquement lorsqu’elle fait référence à un module Transact-SQL, un type défini par l’utilisateur ou une collection de schémas XML dans la définition d’une colonne calculée, d’une contrainte CHECK ou d’une contrainte DEFAULT.

** Les procédures stockées numérotées avec une valeur entière supérieure à 1 ne sont pas suivies en tant qu'entité de référence ou référencée.

autorisations

SQL Server 2008 (10.0.x) - SQL Server 2012 (11.x)

  • Requiert l'autorisation CONTROL sur l'objet référencé. Lorsque l'entité référencée est une fonction de partition, l'autorisation CONTROL sur la base de données est requise.

  • Nécessite l’autorisation SELECT sur sys.dm_sql_referencing_entities. Par défaut, l'autorisation SELECT est accordée à public.

SQL Server 2014 (12.x) et versions ultérieures

  • Ne requiert aucune autorisation sur l'objet référencé. Des résultats partiels peuvent être retournés si l'utilisateur a l'autorisation VIEW DEFINITION uniquement sur certaines entités de référence.

  • Requiert VIEW DEFINITION sur l'objet lorsque l'entité de référence est un objet.

  • Requiert VIEW ANY DEFINITION sur la base de données lorsque l'entité de référence est un déclencheur DDL de niveau base de données.

  • Requiert VIEW ANY DEFINITION sur le serveur lorsque l'entité de référence est un déclencheur DDL au niveau du serveur.

Exemples

R. Retour des entités qui font référence à une entité donnée

L'exemple suivant retourne les entités dans la base de données active qui font référence à la table spécifiée.

USE AdventureWorks2022;  
GO  
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent  
FROM sys.dm_sql_referencing_entities ('Production.Product', 'OBJECT');  
GO  

B. Retour des entités qui font référence à un type donné

L'exemple suivant retourne les entités qui référencent le type d'alias dbo.Flag. Le jeu de résultats montre que deux procédures stockées utilisent ce type. Le dbo.Flag type est également utilisé dans la définition de plusieurs colonnes de la HumanResources.Employee table . Toutefois, étant donné que le type n’est pas dans la définition d’une colonne calculée, d’une contrainte CHECK ou d’une contrainte DEFAULT dans la table, aucune ligne n’est retournée pour la HumanResources.Employee table.

USE AdventureWorks2022;  
GO  
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent  
FROM sys.dm_sql_referencing_entities ('dbo.Flag', 'TYPE');  
GO  

Voici le jeu de résultats.

referencing_schema_name referencing_entity_name   referencing_id referencing_class_desc is_caller_dependent  
----------------------- -------------------------  ------------- ---------------------- -------------------  
HumanResources          uspUpdateEmployeeHireInfo  1803153469    OBJECT_OR_COLUMN       0  
HumanResources          uspUpdateEmployeeLogin     1819153526    OBJECT_OR_COLUMN       0  
(2 row(s) affected)`  

Voir aussi

sys.dm_sql_referenced_entities (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)