MSSQLSERVER_2020

platí pro:SQL Server

Podrobnosti

Attribute Value
Název produktu SQL Server
ID události 2020
Zdroj události MSSQLSERVER
Součást SQLEngine
Symbolický název
Text zprávy Závislosti hlášené pro entitu "%.*ls" neobsahují odkazy na sloupce. Je to buď proto, že entita odkazuje na objekt, který neexistuje, nebo kvůli chybě v jednom nebo více příkazech v entitě. Před opětovným spuštěním dotazu se ujistěte, že entita neobsahuje žádné chyby a že existují všechny objekty odkazované entitou.

Explanation

Funkce sys.dm_sql_referenced_entities systému hlásí jakoukoli závislost na úrovni sloupců pro reference vázané na schémata. Například funkce hlásí všechny závislosti na úrovni sloupců pro indexovaný pohled, protože indexovaný pohled vyžaduje vázání schématu. Pokud však odkazovaná entita není vázaná na schéma, jsou sloupcové závislosti hlášeny pouze tehdy, když lze omezit všechny příkazy, ve kterých jsou sloupce odkazovány. Příkazy lze úspěšně svázat pouze tehdy, pokud všechny objekty existují v době, kdy jsou příkazy parsovány. Pokud žádný příkaz definovaný v entitě neprojde vázáním, závislosti sloupců nebudou hlášeny a sloupec referenced_minor_id vrátí 0. Když nelze vyřešit závislosti sloupců, je zobrazována chyba 2020. Tato chyba nebrání dotazu v vrácení závislostí na úrovni objektu.

Uživatelská akce

Opravte všechny chyby zjištěné ve zprávě před chybou 2020. Například v následujícím příkladu kódu je pohled Production.ApprovedDocuments definován ve sloupcích Title, ChangeNumber, a Status v tabulce Production.Document . Funkce sys.dm_sql_referenced_entities systému je dotazována na objekty a sloupce, na kterých pohled ApprovedDocuments závisí. Protože pohled není vytvořen pomocí klauzule WITH SCHEMA_BINDING, sloupce odkazované v zobrazení lze v referenční tabulce upravit. Příklad mění sloupec ChangeNumber v Production.Document tabulce tím, že jej přejmenuje na TrackingNumber. Katalogový pohled je znovu dotazován pro ApprovedDocuments tento pohled; nicméně nemůže navázat na všechny sloupce definované ve zobrazení. Chyby 207 a 2020 jsou vráceny a identifikují problém. Aby se problém vyřešil, je třeba pohled upravit tak, aby odrážel nový název sloupce.

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

Dotaz vrací následující chybové zprávy.

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.

Následující příklad opravuje název sloupce ve zobrazení.

USE AdventureWorks2022;  
GO  
ALTER VIEW Production.ApprovedDocuments  
AS  
SELECT Title,TrackingNumber, Status  
FROM Production.Document  
WHERE Status = 2;  
GO