MSSQLSERVER_2020

Dotyczy:SQL Server

Szczegóły

Attribute Value
Nazwa produktu SQL Server
Identyfikator zdarzenia 2020
Źródło zdarzenia MSSQLSERVER
Składnik SQLEngine
Nazwa symboliczna
Tekst wiadomości Zależności raportowane dla podmiotu "%.*ls" nie zawierają odniesień do kolumn. Jest to spowodowane tym, że jednostka odwołuje się do obiektu, który nie istnieje lub z powodu błędu w co najmniej jednej instrukcji w jednostce. Przed ponownym uruchomieniem zapytania upewnij się, że w jednostce nie ma żadnych błędów i że istnieją wszystkie obiekty, do których odwołuje się jednostka.

Explanation

Funkcja sys.dm_sql_referenced_entities systemowa raportuje dowolne zależności na poziomie kolumn dla referencji powiązanych ze schematem. Na przykład funkcja będzie raportować wszystkie zależności na poziomie kolumn dla widoku indeksowanego, ponieważ widok indeksowany wymaga wiązania schematu. Jednak gdy odwoływana jednostka nie jest powiązana ze schematem, zależności kolumn są raportowane tylko wtedy, gdy wszystkie instrukcje, w których się odwołują kolumny, mogą być ograniczone. Instrukcje mogą być skutecznie ograniczone tylko wtedy, gdy wszystkie obiekty istnieją w momencie ich parsowania. Jeśli jakiekolwiek zdanie zdefiniowane w encji nie będzie się wiązać, zależności kolumn nie będą raportowane, a kolumna referenced_minor_id zwróci 0. Gdy zależności kolumn nie mogą zostać rozwiązane, pojawia się błąd 2020. Ten błąd nie uniemożliwia zapytania zwracania zależności na poziomie obiektowym.

Akcja użytkownika

Popraw wszelkie błędy zidentyfikowane w wiadomości przed błędem 2020. Na przykład w poniższym przykładzie kodu widok Production.ApprovedDocuments jest zdefiniowany na kolumnach Title, ChangeNumber, oraz Status w tabeli Production.Document . Funkcja systemu sys.dm_sql_referenced_entities jest zapytywana o obiekty i kolumny, od których zależy widok.ApprovedDocuments Ponieważ widok nie jest tworzony za pomocą klauzuli WITH SCHEMA_BINDING, kolumny odwołane w widoku mogą być modyfikowane w referencyjnej tabeli. Przykład zmienia kolumnę ChangeNumber w tabeli Production.Document , zmieniając jej nazwę na TrackingNumber. Widok katalogowy jest ponownie zapytywany o widok; ApprovedDocuments jednak nie może się powiązać ze wszystkimi kolumnami zdefiniowanymi w widoku. Zwracane są błędy 207 i 2020, które identyfikują problem. Aby rozwiązać problem, widok musi zostać zmieniony, aby odzwierciedlał nową nazwę kolumny.

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

Zapytanie zwraca następujące komunikaty o błędzie.

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.

Poniższy przykład poprawia nazwę kolumny w widoku.

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