MSSQLSERVER_2020
S’applique à : SQL Server
Détails
Attribut | Valeur |
---|---|
Nom du produit | SQL Server |
ID de l’événement | 2020 |
Source de l’événement | MSSQLSERVER |
Composant | SQLEngine |
Nom symbolique | |
Texte du message | Les dépendances signalées pour l'entité "%.*ls" n'incluent pas de références aux colonnes. Cela est dû au fait que l'entité fait référence à un objet inexistant ou que l'une ou plusieurs instructions de l'entité comportent une erreur. Avant de réexécuter la requête, assurez-vous que l'entité ne comporte aucune erreur et que tous les objets référencés par l'entité existent. |
Explication
La fonction système sys.dm_sql_referenced_entities signale toutes les dépendances au niveau des colonnes pour les références liées au schéma. Par exemple, la fonction signale toutes les dépendances au niveau des colonnes pour une vue indexée car une vue indexée requiert une liaison de schéma. Toutefois, lorsque l'entité référencée n'est pas liée au schéma, les dépendances de colonne sont signalées uniquement lorsque toutes les instructions dans lesquelles les colonnes sont référencées peuvent être liées. Les instructions ne peuvent être correctement liées que si tous les objets existent au moment de l'analyse des instructions. Si la liaison échoue dans une instruction définie dans l’entité, les dépendances de colonnes ne sont pas signalées et la colonne referenced_minor_id retourne 0. Lorsque les dépendances de colonne ne peuvent pas être résolues, l'erreur 2020 est générée. Cette erreur n'empêche pas la requête de retourner des dépendances au niveau objet.
Action de l’utilisateur
Corrigez toutes les erreurs identifiées dans le message avant l'erreur 2020. Par exemple, dans l'exemple de code suivant, la vue Production.ApprovedDocuments
est définie dans les colonnes Title
, ChangeNumber
et Status
de la table Production.Document
. La fonction système sys.dm_sql_referenced_entities est interrogée pour les objets et les colonnes dont dépend la vue ApprovedDocuments
. Étant donné que la vue n'est pas créée à l'aide de la clause WITH SCHEMA_BINDING, les colonnes référencées dans la vue peuvent être modifiées dans la table référencée. L'exemple modifie la colonne ChangeNumber
de la table Production.Document
en la renommant TrackingNumber
. L'affichage catalogue est interrogé de nouveau pour la vue ApprovedDocuments
; toutefois, il ne peut pas être lié à toutes les colonnes définies dans la vue. Les erreurs 207 et 2020 sont retournées pour identifier le problème. Pour résoudre le problème, il est nécessaire de modifier la vue de façon à refléter le nouveau nom de la colonne.
USE AdventureWorks2022;
GO
CREATE VIEW Production.ApprovedDocuments
AS
SELECT Title, ChangeNumber, Status
FROM Production.Document
WHERE Status = 2;
GO
SELECT referenced_schema_name AS schema_name
,referenced_entity_name AS table_name
,referenced_minor_name AS referenced_column
FROM sys.dm_sql_referenced_entities ('Production.ApprovedDocuments', 'OBJECT');
GO
EXEC sp_rename 'Production.Document.ChangeNumber', 'TrackingNumber', 'COLUMN';
GO
SELECT referenced_schema_name AS schema_name
,referenced_entity_name AS table_name
,referenced_minor_name AS referenced_column
FROM sys.dm_sql_referenced_entities ('Production.ApprovedDocuments', 'OBJECT');
GO
La requête retourne les messages d'erreur suivants.
Msg 207, Level 16, State 1, Procedure ApprovedDocuments, Line 3
Invalid column name 'ChangeNumber'.
Msg 2020, Level 16, State 1, Line 1
The dependencies reported for entity
"Production.ApprovedDocuments" do not include references to
columns. This is either because the entity references an
object that does not exist or because of an error in one or
more statements in the entity. Before rerunning the query,
ensure that there are no errors in the entity and that all
objects referenced by the entity exist.
L'exemple suivant corrige le nom de colonne dans la vue.
USE AdventureWorks2022;
GO
ALTER VIEW Production.ApprovedDocuments
AS
SELECT Title,TrackingNumber, Status
FROM Production.Document
WHERE Status = 2;
GO