Description des dépendances SQL
Nouveau : 5 décembre 2005
Les dépendances SQL correspondent aux références de nom utilisées dans les expressions SQL qui rendent un objet dépendant d'un autre objet. Vous pouvez obtenir toutes les dépendances de nom en interrogeant l'affichage catalogue sys.sql_dependencies. Pour chaque ligne dans sys.sql_dependencies, l'entité référencée (referenced_major_id) apparaît par nom dans une expression SQL permanente de l'objet de référence.
L'illustration ci-dessous montre un exemple de dépendance SQL.
L'illustration présente deux objets : la procédure X et la procédure Y. La procédure X contient une expression SQL qui possède une référence de nom à la procédure Y. La procédure X est appelée « objet de référence » ou « objet dépendant », alors que la procédure Y est appelée « objet référencé » ou « objet indépendant ». Comme la procédure X dépend de la procédure Y, la procédure X échouera suite à une erreur d'exécution si la procédure Y n'existe pas. En revanche, la procédure Y n'échouera pas si la procédure X n'existe pas.
L'exemple ci-dessous montre comment la procédure stockée X
peut dépendre de la procédure stockée Y
.
USE tempdb
GO
CREATE PROCEDURE Y AS
SELECT * FROM sys.objects
GO
CREATE PROCEDURE X as
EXEC Y
GO
Pour voir la dépendance de X
sur Y
, exécutez la requête ci-dessous.
SELECT *
FROM sys.sql_dependencies
WHERE object_id = object_id('X')
AND referenced_major_id = object_id('Y')
AND referenced_minor_id = 0
AND class = 0;
GO
Si vous supprimez la procédure X
, vous pouvez encore exécuter la procédure Y
. La procédure Y
est indépendante de la procédure X
. Inversement, si vous supprimez la procédure Y
et essayez d'exécuter la procédure X
, SQL Server retourne une erreur d'exécution. La procédure X
dépend de la procédure Y
.
Une fois la procédure Y
supprimée, la ligne correspondant à la procédure X
dans l'affichage catalogue sys.sql_dependencies est également supprimée. Pour examiner ce comportement, exécutez le code ci-dessous.
USE tempdb;
GO
DROP PROCEDURE Y;
GO
SELECT *
FROM sys.sql_dependencies
WHERE object_id = object_id('X')
AND referenced_major_id = object_id('Y')
AND referenced_minor_id = 0
AND class = 0;
GO
Vous pouvez utiliser la clause WITH SCHEMABINDING pour forcer la maintenance des dépendances. Si vous liez le schéma d'une vue, vous ne pouvez pas modifier ni supprimer la table ou les colonnes référencées de manière à entraîner la cassure de la dépendance. De même, si vous liez le schéma d'une fonction, vous ne pouvez pas modifier ni supprimer les objets et les colonnes référencés de manière à casser les dépendances de la fonction. Pour plus d'informations sur la liaison de schéma, consultez Création de fonctions définies par l'utilisateur (moteur de base de données) et Conception et mise en œuvre de vues.
Remarque : |
---|
SQL Server 2005 ne prend pas en charge les procédures stockées ni les déclencheurs liés au schéma. |
Exemples de dépendances SQL
Le tableau ci-dessous répertorie des exemples de dépendances SQL qui peuvent exister entre des objets de référence et des objets référencés.
Type d'objet de référence
Expression SQL dans une colonne de définition d'un affichage catalogue
Exemple d'entité référencée
Procédure, fonction, vue, déclencheur
sys.sql_modules
Remarque :
Pour les déclencheurs de niveau serveur, consultez sys.server_sql_modules
Table, procédure, type
Colonne calculée
sys.computed_columns
Fonction, type, autre colonne
Définition DEFAULT
sys.default_constraints
Fonction
Contrainte CHECK
sys.check_constraints
Fonction, fonction de partition
Procédure numérotée
sys.numbered_procedure
Table, procédure, type
Fonction liée au schéma
sys.sql_modules
Collection de schémas XML
Exemples de dépendances non-SQL
Toutes les dépendances qui existent entre des objets ne sont pas des dépendances SQL. Si un objet ne possède pas d'expression SQL contenant une référence de nom à un autre objet, aucune dépendance SQL n'existe entre les deux objets. Le tableau ci-dessous répertorie certains exemples de dépendances non-SQL.
Type d'objet de référence | Dépend de | Description |
---|---|---|
Colonne |
Table |
La dépendance entre la table et ses colonnes est implicite. Cette relation est exprimée dans le catalogue système comme la clé étrangère sys.columns.object_id. |
Définition DEFAULT sur une colonne, par exemple :
|
Colonne. À partir de l'exemple, |
Aucune dépendance SQL n'existe entre la définition DEFAULT et la colonne, car la constante |
Voir aussi
Autres ressources
sys.sql_dependencies (Transact-SQL)
sys.sysdepends (Transact-SQL)
sp_depends (Transact-SQL)