Udostępnij za pośrednictwem


sys.sql_expression_dependencies (Transact-SQL)

Dotyczy:sql Serverazure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)punkt końcowy analizy SQL w usłudze Microsoft FabricWarehouse w usłudze Microsoft Fabric

Zawiera jeden wiersz dla każdej zależności według nazwy od jednostki zdefiniowanej przez użytkownika w bieżącej bazie danych. Obejmuje to zależności między natywnie skompilowanymi, skalarnymi funkcjami zdefiniowanymi przez użytkownika i innymi modułami programu SQL Server. Zależność między dwiema jednostkami jest tworzona, gdy jedna jednostka o nazwie , do której odwołuje się jednostka, pojawia się według nazwy w utrwałym wyrażeniu SQL innej jednostki o nazwie odwołującej się do jednostki. Na przykład gdy tabela jest przywołynięta w definicji widoku, widok, jako jednostka odwołująca się, zależy od tabeli, jednostki, do których odwołuje się odwołanie. Jeśli tabela zostanie porzucona, widok będzie bezużyteczny.

Aby uzyskać więcej informacji, zobacz Scalar User-Defined Functions for In-Memory OLTP.

Ten widok wykazu umożliwia raportowanie informacji o zależnościach dla następujących jednostek:

  • Jednostki powiązane ze schematem.

  • Jednostki niezwiązane ze schematem.

  • Jednostki między bazami danych i między serwerami. Nazwy jednostek są zgłaszane; jednak identyfikatory jednostek nie są rozpoznawane.

  • Zależności na poziomie kolumny dotyczące jednostek powiązanych ze schematem. Zależności na poziomie kolumny dla obiektów niezwiązanych ze schematem można zwrócić przy użyciu sys.dm_sql_referenced_entities.

  • Funkcja DDL na poziomie serwera jest wyzwalana w kontekście bazy danych master.

Nazwa kolumny Typ danych Opis
referencing_id Identyfikator jednostki odwołującej się. Nie może zawierać wartości null.
referencing_minor_id Identyfikator kolumny, gdy jednostka odwołująca się jest kolumną; w przeciwnym razie 0. Nie może zawierać wartości null.
referencing_class tinyint Klasa jednostki odwołującej się.

1 = Obiekt lub kolumna

12 = Wyzwalacz DDL bazy danych

13 = wyzwalacz DDL serwera

Nie może zawierać wartości null.
referencing_class_desc nvarchar(60) Opis klasy odwoływania się do jednostki.

OBJECT_OR_COLUMN

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER

Nie może zawierać wartości null.
is_schema_bound_reference bitów 1 = Jednostka, do których odwołuje się schemat, jest powiązana.

0 = Jednostka, do których odwołuje się odwołanie, nie jest powiązana schematem.

Nie może zawierać wartości null.
referenced_class tinyint Klasa jednostki, do których odwołuje się odwołanie.

1 = Obiekt lub kolumna

6 = typ

10 = kolekcja schematów XML

21 = Funkcja partycji

Nie może zawierać wartości null.
referenced_class_desc nvarchar(60) Opis klasy jednostki, do których odwołuje się odwołanie.

OBJECT_OR_COLUMN

TYP

XML_SCHEMA_COLLECTION

PARTITION_FUNCTION

Nie może zawierać wartości null.
referenced_server_name nazwa systemu Nazwa serwera jednostki, do których odwołuje się odwołanie.

Ta kolumna jest wypełniana dla zależności między serwerami, które są tworzone przez określenie prawidłowej nazwy czteroczęściowej. Aby uzyskać informacje o nazwach wieloczęściowych, zobacz Transact-SQL konwencje składni.

Wartość NULL dla jednostek niezwiązanych ze schematem, do których odwołuje się jednostka bez określania nazwy czteroczęściowej.

Wartość NULL dla jednostek powiązanych ze schematem, ponieważ muszą znajdować się w tej samej bazie danych i dlatego można zdefiniować tylko przy użyciu dwuczęściowej nazwy (schema.object).
referenced_database_name nazwa systemu Nazwa bazy danych jednostki, do których odwołuje się odwołanie.

Ta kolumna jest wypełniana dla odwołań między bazami danych lub między serwerami, które zostały wykonane, określając prawidłową trzyczęściową lub czteroczęściową nazwę.

Wartość NULL dla odwołań niezwiązanych schematami w przypadku określenia przy użyciu jednej lub dwuczęściowej nazwy.

Wartość NULL dla jednostek powiązanych ze schematem, ponieważ muszą znajdować się w tej samej bazie danych i dlatego można zdefiniować tylko przy użyciu dwuczęściowej nazwy (schema.object).
referenced_schema_name nazwa systemu Schemat, do którego należy odwołanie jednostki.

Wartość NULL dla odwołań niezwiązanych ze schematem, do których odwołuje się jednostka bez określania nazwy schematu.

Nigdy nie ma wartości NULL dla odwołań powiązanych ze schematem, ponieważ jednostki powiązane ze schematem muszą być zdefiniowane i przywoływały przy użyciu nazwy dwuczęściowej.
referenced_entity_name nazwa systemu Nazwa jednostki, do których odwołuje się odwołanie. Nie może zawierać wartości null.
referenced_id Identyfikator jednostki, do których odwołuje się odwołanie. Wartość tej kolumny nigdy nie ma wartości NULL dla odwołań powiązanych ze schematem. Wartość tej kolumny jest zawsze równa NULL dla odwołań między serwerami i między bazami danych.

Wartość NULL dla odwołań w bazie danych, jeśli nie można określić identyfikatora. W przypadku odwołań innych niż schemat nie można rozpoznać identyfikatora w następujących przypadkach:

Odwołanie do jednostki nie istnieje w bazie danych.

Schemat odwoływałej się jednostki zależy od schematu obiektu wywołującego i jest rozpoznawany w czasie wykonywania. W tym przypadku is_caller_dependent jest ustawiona na 1.
referenced_minor_id Identyfikator kolumny, do których odwołuje się odwołanie, gdy jednostka odwołująca się jest kolumną; w przeciwnym razie 0. Nie może zawierać wartości null.

Jednostka, do którego odwołuje się odwołanie, jest kolumną, gdy kolumna jest identyfikowana według nazwy w jednostce odwołującej się lub gdy jednostka nadrzędna jest używana w instrukcji SELECT *.
is_caller_dependent bitów Wskazuje, że powiązanie schematu dla odwoływalonej jednostki występuje w czasie wykonywania; dlatego rozpoznawanie identyfikatora jednostki zależy od schematu obiektu wywołującego. Dzieje się tak, gdy przywoływała jednostka jest procedurą składowaną, rozszerzoną procedurą składowaną lub niezwiązaną ze schematem funkcją zdefiniowaną przez użytkownika wywoływaną w instrukcji EXECUTE.

1 = Jednostka, do których odwołuje się wywołanie, jest zależna i jest rozpoznawana w czasie wykonywania. W takim przypadku referenced_id ma wartość NULL.

0 = Identyfikator jednostki, do których odwołuje się odwołanie, nie jest zależny od obiektu wywołującego.

Zawsze 0 dla odwołań powiązanych ze schematem oraz odwołań między bazami danych i między serwerami, które jawnie określają nazwę schematu. Na przykład odwołanie do jednostki w formacie EXEC MyDatabase.MySchema.MyProc nie jest zależne od obiektu wywołującego. Jednak odwołanie w formacie EXEC MyDatabase..MyProc jest zależne od obiekt wywołujący.
is_ambiguous bitów Wskazuje, że odwołanie jest niejednoznaczne i może być rozpoznawane w czasie wykonywania dla funkcji zdefiniowanej przez użytkownika, typu zdefiniowanego przez użytkownika (UDT) lub odwołania xquery do kolumny typu xml.

Załóżmy na przykład, że instrukcja SELECT Sales.GetOrder() FROM Sales.MySales jest zdefiniowana w procedurze składowanej. Dopóki procedura składowana nie zostanie wykonana, nie wiadomo, czy Sales.GetOrder() jest funkcją zdefiniowaną przez użytkownika w schemacie Sales lub kolumnie o nazwie Sales typu UDT z metodą o nazwie GetOrder().

1 = Odwołanie jest niejednoznaczne.

0 = Odwołanie jest jednoznaczne lub jednostka może być pomyślnie powiązana po wywołaniu widoku.

Zawsze 0 dla odwołań powiązanych ze schematem.

Uwagi

W poniższej tabeli wymieniono typy jednostek, dla których są tworzone i obsługiwane informacje o zależnościach. Informacje o zależnościach nie są tworzone ani obsługiwane dla reguł, wartości domyślnych, tabel tymczasowych, tymczasowych procedur składowanych ani obiektów systemowych.

Nuta

Usługi Azure Synapse Analytics i Parallel Data Warehouse obsługują tabele, widoki, przefiltrowane statystyki i Transact-SQL typy jednostek procedur składowanych z tej listy. Informacje o zależnościach są tworzone i obsługiwane tylko dla tabel, widoków i przefiltrowanych statystyk.

Typ jednostki Odwoływanie się do jednostki Jednostka, do których odwołuje się odwołanie
Stół Tak* Tak
Widok Tak Tak
Filtrowany indeks Tak** Nie
Przefiltrowane statystyki Tak** Nie
Transact-SQL procedurę składowaną*** Tak Tak
Procedura składowana CLR Nie Tak
Transact-SQL funkcja zdefiniowana przez użytkownika Tak Tak
Funkcja zdefiniowana przez użytkownika środowiska CLR Nie Tak
Wyzwalacz CLR (DML i DDL) Nie Nie
wyzwalacz DML Transact-SQL Tak Nie
wyzwalacz DDL na poziomie bazy danych Transact-SQL Tak Nie
Transact-SQL wyzwalacz DDL na poziomie serwera Tak Nie
Rozszerzone procedury składowane Nie Tak
Kolejka Nie Tak
Synonim Nie Tak
Typ (alias i typ zdefiniowany przez użytkownika CLR) Nie Tak
Kolekcja schematów XML Nie Tak
Funkcja partition Nie Tak

* Tabela jest śledzona jako jednostka odwołująca się tylko wtedy, gdy odwołuje się do modułu Transact-SQL, typu zdefiniowanego przez użytkownika lub kolekcji schematów XML w definicji obliczonej kolumny, ograniczenia CHECK lub ograniczenia DEFAULT.

** Każda kolumna używana w predykacie filtru jest śledzona jako jednostka odwołująca się.

Ponumerowane procedury składowane o wartości całkowitej większej niż 1 nie są śledzone jako odwołujące się lub przywoływane jednostki.

Uprawnienia

Wymaga uprawnienia WYŚWIETL DEFINICJĘ dla bazy danych i uprawnienia SELECT dla sys.sql_expression_dependencies dla bazy danych. Domyślnie uprawnienie SELECT jest przyznawane tylko członkom stałej roli bazy danych db_owner. Gdy uprawnienie SELECT i VIEW DEFINITION zostanie przyznane innemu użytkownikowi, grante może wyświetlić wszystkie zależności w bazie danych.

Przykłady

A. Zwracanie jednostek, do których odwołuje się inna jednostka

Poniższy przykład zwraca tabele i kolumny, do których odwołuje się widok Production.vProductAndDescription. Widok zależy od jednostek (tabel i kolumn) zwracanych w kolumnach referenced_entity_name i referenced_column_name.

USE AdventureWorks2022;  
GO  
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,   
    o.type_desc AS referencing_description,   
    COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,   
    referencing_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. Zwracanie jednostek odwołujących się do innej jednostki

Poniższy przykład zwraca jednostki odwołujące się do tabeli Production.Product. Jednostki zwrócone w kolumnie referencing_entity_name zależą od tabeli Product.

USE AdventureWorks2022;  
GO  
SELECT OBJECT_SCHEMA_NAME ( referencing_id ) AS referencing_schema_name,  
    OBJECT_NAME(referencing_id) AS referencing_entity_name,   
    o.type_desc AS referencing_description,   
    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. Zwracanie zależności między bazami danych

Poniższy przykład zwraca wszystkie zależności między bazami danych. Przykład najpierw tworzy bazę danych db1 i dwie procedury składowane odwołujące się do tabel w bazach danych db2 i db3. Tabela sys.sql_expression_dependencies jest następnie odpytywane w celu raportowania zależności między między procedurami a tabelami. Zwróć uwagę, że wartość NULL jest zwracana w kolumnie referenced_schema_name dla przywoływanej jednostki t3, ponieważ nazwa schematu nie została określona dla tej jednostki w definicji procedury.

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  
  

Zobacz też

sys.dm_sql_referenced_entities (Transact-SQL)
sys.dm_sql_referencing_entities (Transact-SQL)