sys.sql_expression_dependencies (Transact-SQL)
Contient une ligne pour chaque dépendance par nom sur une entité définie par l'utilisateur dans la base de données actuelle. 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, lorsqu'une table est référencée dans la définition d'une vue, la vue, comme entité de référence, dépend de la table, l'entité référencée. Si la table est supprimée, la vue est inutilisable.
Vous pouvez utiliser cet affichage catalogue pour signaler des informations de dépendance pour les entités suivantes :
Entités liées au schéma.
Entités non liées au schéma.
Entités des bases de données croisées et entre serveurs. Les noms d'entités sont signalés ; toutefois, les ID d'entité ne sont pas résolus.
Dépendances au niveau des colonnes sur les entités liées au schéma. Les dépendances au niveau des colonnes pour les objets non liés au schéma peuvent être retournées en utilisant sys.dm_sql_referenced_entities.
Déclencheurs DDL au niveau du serveur dans le contexte de la base de données master.
Nom de la colonne |
Type de données |
Description |
---|---|---|
referencing_id |
int |
ID de l'entité de référence. N'accepte pas la valeur Null. |
referencing_minor_id |
int |
ID de colonne lorsque l'entité de référence est une colonne ; sinon 0. N'accepte pas la valeur Null. |
referencing_class |
tinyint |
Classe de l'entité de référence. 1 = Objet ou colonne 12 = Déclencheur DDL de base de données 13 = Déclencheur DDL de serveur N'accepte pas la valeur Null. |
referencing_class_desc |
nvarchar(60) |
Description de la classe de l'entité de référence. OBJECT_OR_COLUMN DATABASE_DDL_TRIGGER SERVER_DDL_TRIGGER N'accepte pas la valeur Null. |
is_schema_bound_reference |
bit |
1 = l'entité référencée est liée au schéma. 0 = l'entité référencée n'est pas liée au schéma. N'accepte pas la valeur Null. |
referenced_class |
tinyint |
Classe de l'entité référencée. 1 = Objet ou colonne 6 = Type 10 = Collection du schéma XML 21 = Fonction de partition N'accepte pas la valeur Null. |
referenced_class_desc |
nvarchar(60) |
Description de la classe de l'entité référencée. OBJECT_OR_COLUMN TYPE XML_SCHEMA_COLLECTION PARTITION_FUNCTION N'accepte pas la valeur Null. |
referenced_server_name |
sysname |
Nom du serveur de l'entité référencée. Cette colonne est remplie pour les dépendances entre serveurs qui sont établies en spécifiant un nom en quatre parties valide. Pour plus d'informations sur les noms en plusieurs parties, consultez Conventions de syntaxe de Transact-SQL (Transact-SQL). NULL pour les entités non liées au schéma pour lesquelles l'entité a été référencée sans spécifier un nom en quatre parties. NULL pour les entités liées au schéma, car elles doivent être dans la même base de données et par conséquent peuvent uniquement être définies à l'aide d'un nom en deux parties (schema.object). |
referenced_database_name |
sysname |
Nom de la base de données de l'entité référencée. Cette colonne est remplie pour les références des bases de données croisées et entre serveurs qui sont établies en spécifiant un nom en trois ou quatre parties valide. NULL pour les références non liées au schéma en cas de spécification à l'aide d'un nom en une ou deux parties. NULL pour les entités liées au schéma, car elles doivent être dans la même base de données et par conséquent peuvent uniquement être définies à l'aide d'un nom en deux parties (schema.object). |
referenced_schema_name |
sysname |
Schéma auquel l'entité référencée appartient. NULL pour les références non liées au schéma dans lesquelles l'entité a été référencée sans spécifier le nom de schéma. Jamais NULL pour les références liées au schéma, car les entités liées au schéma doivent être définies et référencées en utilisant un nom en deux parties. |
referenced_entity_name |
sysname |
Nom de l'entité référencée. N'accepte pas la valeur Null. |
referenced_id |
int |
ID de l'entité référencée. Toujours NULL pour les références des bases de données croisées et entre serveurs. NULL pour les références dans la base de données si l'ID ne peut pas être déterminé. Pour les références non liées au schéma, l'ID ne peut pas être résolu dans les cas suivants :
Jamais NULL pour les références liées au schéma. |
referenced_minor_id |
int |
ID de la colonne référencée lorsque l'entité de référence est une colonne ; sinon 0. N'accepte pas la valeur Null. Une entité référencée est une colonne lorsqu'une colonne est identifiée par son nom dans l'entité de référence, ou lorsque l'entité parente est utilisée dans une instruction SELECT *. |
is_caller_dependent |
bit |
Indique que la liaison de schéma pour l'entité référencée se produit au moment de l'exécution ; par conséquent, la résolution de l'ID d'entité dépend du schéma de l'appelant. Cela se produit lorsque l'entité référencée est une procédure stockée, procédure stockée étendue ou fonction définie par l'utilisateur non liée au schéma appelée dans une instruction EXECUTE. 1 = l'entité référencée dépend de l'appelant et est résolue au moment de l'exécution. Dans ce cas, referenced_id a la valeur NULL. 0 = l'ID de l'entité référencée ne dépend pas de l'appelant. Toujours 0 pour les références liées au schéma et pour les références des bases de données croisées et entre serveurs qui spécifient explicitement un nom de schéma. Par exemple, une référence à une entité au format EXEC MyDatabase.MySchema.MyProc ne dépend pas de l'appelant. Toutefois, une référence au format EXEC MyDatabase..MyProc dépend de l'appelant. |
is_ambiguous |
bit |
Indique que la référence est équivoque et peut être convertie au moment de l'exécution en une fonction définie par l'utilisateur, un type défini par l'utilisateur ou une référence xquery à une colonne de type xml. Par exemple, supposez que l'instruction SELECT Sales.GetOrder() FROM Sales.MySales est définie dans une procédure stockée. Jusqu'à ce que la procédure stockée soit exécutée, il n'est pas possible de savoir si Sales.GetOrder() est une fonction définie par l'utilisateur dans le schéma Sales ou une colonne nommée Sales de type défini par l'utilisateur avec une méthode nommée GetOrder(). 1 = la référence est ambiguë. 0 = la référence n'est pas équivoque ou l'entité peut être liée avec succès lorsque la vue est appelée. Toujours 0 pour les références liées au schéma. |
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 |
Index filtré |
Oui** |
Non |
Statistiques filtrées |
Oui** |
Non |
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.
** Chaque colonne utilisée dans le prédicat de filtre est suivie en tant qu'entité de référence.
*** 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 VIEW DEFINITION sur la base de données et l'autorisation SELECT sur sys.sql_expression_dependencies pour la base de données. Par défaut, l'autorisation SELECT est accordée uniquement aux membres du rôle de base de données fixe db_owner. Lorsque les autorisations SELECT et VIEW DEFINITION sont accordées à un autre utilisateur, le bénéficiaire peut consulter toutes les dépendances dans la base de données.
Exemples
A. Retour d'entités qui sont référencées par une autre entité
L'exemple suivant retourne les tables et colonnes référencées dans la vue Production.vProductAndDescription. La vue dépend des entités (tables et colonnes) retournées dans les colonnes referenced_entity_name et referenced_column_name.
USE AdventureWorks2008R2;
GO
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,
o.type_desc AS referencing_desciption,
COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,
referencing_class_desc, referenced_class_desc,
referenced_server_name, referenced_database_name, referenced_schema_name,
referenced_entity_name,
COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,
is_caller_dependent, is_ambiguous
FROM sys.sql_expression_dependencies AS sed
INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id
WHERE referencing_id = OBJECT_ID(N'Production.vProductAndDescription');
GO
B. Retour d'entités qui référencent une autre entité
L'exemple suivant retourne les entités qui référencent la table Production.Product. Les entités retournées dans la colonne referencing_entity_name dépendent de la table Product.
USE AdventureWorks2008R2;
GO
SELECT OBJECT_SCHEMA_NAME ( referencing_id ) AS referencing_schema_name,
OBJECT_NAME(referencing_id) AS referencing_entity_name,
o.type_desc AS referencing_desciption,
COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,
referencing_class_desc, referenced_class_desc,
referenced_server_name, referenced_database_name, referenced_schema_name,
referenced_entity_name,
COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,
is_caller_dependent, is_ambiguous
FROM sys.sql_expression_dependencies AS sed
INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id
WHERE referenced_id = OBJECT_ID(N'Production.Product');
GO
C. Retour de dépendances de bases de données croisées
L'exemple suivant retourne toutes les dépendances de bases de données croisées. L'exemple crée d'abord la base de données db1 et deux procédures stockées qui référencent les tables dans les bases de données db2 et db3. La table sys.sql_expression_dependencies est alors interrogée pour signaler les dépendances de bases de données croisées entre les procédures et les tables. Remarquez que la valeur NULL est retournée dans la colonne referenced_schema_name pour l'entité référencée t3, car aucun nom de schéma n'a été spécifié pour cette entité dans la définition de la procédure.
CREATE DATABASE db1;
GO
USE db1;
GO
CREATE PROCEDURE p1 AS SELECT * FROM db2.s1.t1;
GO
CREATE PROCEDURE p2 AS
UPDATE db3..t3
SET c1 = c1 + 1;
GO
SELECT OBJECT_NAME (referencing_id),referenced_database_name,
referenced_schema_name, referenced_entity_name
FROM sys.sql_expression_dependencies
WHERE referenced_database_name IS NOT NULL;
GO
USE master;
GO
DROP DATABASE db1;
GO
Voir aussi