Partager via


sys.dm_sql_referencing_entities (Transact-SQL)

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

Icône Lien de rubriqueConventions 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 requis, sauf lorsque la classe référencée est PARTITION_FUNCTION.

    schema_name.referenced_entity_name est de type 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 de type 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. Accepte 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érence. 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 l'entité de référence.

OBJET

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, valeurs par défaut, tables temporaires, procédures stockées temporaires ou objets système.

Type d'entité

Entité de référence

Entité référencée

Table

Oui*

Oui

Vue

Oui

Oui

Procédure stockée Transact-SQL**

Oui

Oui

Procédure stockée CLR

Non

Oui

Fonction Transact-SQL définie par l'utilisateur

Oui

Oui

Fonction CLR définie par l'utilisateur

Non

Oui

Déclencheur CLR (DML et DDL)

Non

Non

Déclencheur DML Transact-SQL

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 une entité de référence uniquement lorsqu'elle 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, contrainte CHECK ou 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.

Pour plus d'informations, consultez Description des dépendances SQL.

Autorisations

Requiert l'autorisation CONTROL sur l'entité référencée et l'autorisation SELECT sur sys.dm_sql_referencing_entities. Lorsque l'entité référencée est une fonction de partition, l'autorisation CONTROL sur la base de données est requise. Par défaut, l'autorisation SELECT est accordée à public.

Exemples

A. 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 AdventureWorks2008R2;
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 type dbo.Flag est également utilisé dans la définition de plusieurs colonnes dans la table HumanResources.Employee. Toutefois, étant donné qu'il 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 table HumanResources.Employee.

USE AdventureWorks2008R2;
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 l'ensemble des 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 ligne(s) affectée(s))