sys.sql_expression_dependencies (Transact-SQL)

platí pro:SQL Serverazure SQL Managed InstanceAzure Synapse AnalyticsAnalytics platform System (PDW)koncový bod SQL Analytics v Microsoft FabricWarehouse v Microsoft Fabric

Obsahuje jeden řádek pro každou závislost podle názvu na uživatelem definované entitě v aktuální databázi. To zahrnuje závislosti mezi nativně zkompilovanými, skalárními uživatelem definovanými funkcemi a dalšími moduly SQL Serveru. Závislost mezi dvěma entitami se vytvoří, když se jedna entita nazývá odkazovaná entita, se zobrazí podle názvu v trvalém výrazu SQL jiné entity, který se nazývá odkazující na entitu. Pokud je například tabulka odkazována v definici zobrazení, zobrazení, jako odkazující entita, závisí na tabulce, odkazované entitě. Pokud se tabulka zahodí, zobrazení je nepoužitelné.

Další informace naleznete v tématu Skalární User-Defined Functions pro In-Memory OLTP.

Toto zobrazení katalogu můžete použít k hlášení informací o závislostech pro následující entity:

  • Entity vázané na schéma

  • Nevázané entity bez schématu

  • Entity mezi databázemi a entitami mezi servery Jsou hlášeny názvy subjektů; identifikace entit však nejsou vyřazeny.

  • Závislosti na úrovni sloupců u entit vázaných schématem Závislosti na úrovni sloupců pro objekty, které nejsou vázané na schéma, mohou být vráceny pomocí sys.dm_sql_referenced_entities.

  • DDL na úrovni serveru se spouští v kontextu databáze master .

Název sloupce Datový typ Popis
referencing_id int ID odkazující entity. Není nulovatelný.
referencing_minor_id int ID sloupce, pokud odkazující entita je sloupec; jinak 0. Není nulovatelný.
referencing_class tinyint Třída odkazující entity

1 = Objekt nebo sloupec
12 = Spouštěč DDL databáze
13 = Spouštěč DDL serveru

Není nulovatelný.
referencing_class_desc nvarchar(60) Popis třídy odkazující entity.

OBJECT_OR_COLUMN
DATABASE_DDL_TRIGGER
SERVER_DDL_TRIGGER

Není nulovatelný.
is_schema_bound_reference bitová 1 = Odkazovaná entita je vázána na schéma.
0 = Odkazovaná entita není vázaná na schéma.

Není nulovatelný.
referenced_class tinyint Třída odkazované entity

1 = Objekt nebo sloupec
6 = Typ
7 = Index
10 = Kolekce XML schémat
21 = Partition funkce

Není nulovatelný.
referenced_class_desc nvarchar(60) Popis třídy odkazované entity

OBJECT_OR_COLUMN
TYPE
INDEX
XML_SCHEMA_COLLECTION
PARTITION_FUNCTION

Není nulovatelný.
referenced_server_name sysname Název serveru odkazované entity

Tento sloupec se vyplní pro závislosti mezi servery, které jsou provedeny zadáním platného čtyřdílného názvu. Informace o názvech s více částmi najdete v tématu Transact-SQL konvence syntaxe.

NULL pro entity nevázané na schémata, u kterých byla entita odkazována bez specifikace čtyřdílného názvu.

NULL pro entity vázané na schémata, protože musí být ve stejné databázi a proto je lze definovat pouze pomocí dvoudílného (schema.object) jména.
referenced_database_name sysname Název databáze odkazované entity.

Tento sloupec se vyplní pro odkazy mezi databázemi nebo mezi servery, které jsou vytvořené zadáním platného třídílného nebo čtyřdílného názvu.

NULL pro odkazy bez schématu při použití jednosložkového nebo dvoudílného názvu.

NULL pro entity vázané na schémata, protože musí být ve stejné databázi a proto je lze definovat pouze pomocí dvoučástného schématu (schéma.objektu) názvu.
referenced_schema_name sysname Schéma, ve kterém odkazovaná entita patří

NULL pro odkazy nevázané na schémata, kde byla entita odkazována bez specifikace názvu schématu.

Nikdy u NULL odkazů vázaných na schémata, protože entity vázané na schéma musí být definovány a odkazovány pomocí dvoudílného názvu.
referenced_entity_name sysname Název odkazované entity Není nulovatelný.
referenced_id int ID odkazované entity. Hodnota tohoto sloupce nikdy NULL není určena pro reference vázané na schémata. Hodnota tohoto sloupce je vždy NULL pro odkazy mezi servery a databázemi.

NULL pro reference v databázi, pokud nelze identifikovat ID. Pro reference nevázané na schéma nelze ID vyřešit v následujících případech:

Odkazovaná entita v databázi neexistuje.

Schéma odkazované entity závisí na schématu volajícího a je vyřešeno za běhu. V tomto případě je is_caller_dependent nastavena na hodnotu 1.
referenced_minor_id int ID odkazovaného sloupce, pokud je odkazující entita sloupec; jinak 0. Není nulovatelný.

Odkazovaná entita je sloupec, pokud je sloupec identifikován názvem v odkazující entitě nebo když je nadřazená entita použita v příkazu SELECT *.
is_caller_dependent bitová Označuje, že vazba schématu pro odkazovanou entitu probíhá za běhu; proto rozlišení ID entity závisí na schématu volajícího. K tomu dochází v případě, že odkazovaná entita je uložená procedura, rozšířená uložená procedura nebo uživatelem definovaná funkce nedefinovaná schématem, která je volána v příkazu EXECUTE.

1 = Odkazovaná entita je závislá na volajícím a je vyřešena za běhu. V tomto případě je referenced_id .NULL

0 = Odkazované ID entity není závislé na volajícím.

Vždy 0 pro odkazy vázané na schéma a pro odkazy mezi databázemi a mezi servery, které explicitně určují název schématu. Například odkaz na entitu ve formátu EXEC MyDatabase.MySchema.MyProc není závislý na volajícím. Odkaz ve formátu EXEC MyDatabase..MyProc je však závislý na volajícím.
is_ambiguous bitová Označuje, že reference je nejednoznačná a může se za běhu vyřešit na uživatelem definovanou funkci, uživatelem definovaný typ (UDT) nebo XQuery odkaz na sloupec typu xml.

Předpokládejme například, že příkaz SELECT Sales.GetOrder() FROM Sales.MySales je definován v uložené proceduře. Dokud není uložená procedura vykonána, není známo, zda Sales.GetOrder() je v schématu Sales uživatelsky definovaná funkce nebo sloupec Sales typu UDT s metodou nazvanou GetOrder().

1 = Odkaz je nejednoznačný.

0 = Reference je jednoznačná nebo lze entitu úspěšně svázat při volání pohledu.

Vždy 0 pro odkazy vázané na schéma.

Poznámky

Následující tabulka uvádí typy entit, pro které se informace o závislostech vytvářejí a udržují. Informace o závislosti nejsou vytvářeny ani udržovány pro pravidla, výchozí hodnoty, dočasné tabulky, dočasné uložené procedury ani systémové objekty.

Poznámka

Azure Synapse Analytics a Paralelní datový sklad podporují tabulky, zobrazení, filtrované statistiky a Transact-SQL typy entit uložených procedur z tohoto seznamu. Informace o závislostech se vytvářejí a udržují pouze pro tabulky, zobrazení a filtrované statistiky.

Typ entity Odkazování na entitu Odkazovaná entita
Stůl Ano1 Ano
Pohled Ano Ano
Filtrovaný index Ano2 Ne
Filtrované statistiky Ano2 Ne
Transact-SQL uložená procedura3 Ano Ano
Uložená procedura CLR Ne Ano
Transact-SQL uživatelem definovaná funkce Ano Ano
Uživatelem definovaná funkce CLR Ne Ano
Trigger CLR (DML a DDL) Ne Ne
Trigger Transact-SQL DML Ano Ne
trigger DDL na úrovni databáze Transact-SQL Ano Ne
trigger DDL na úrovni serveru Transact-SQL Ano Ne
Rozšířené uložené procedury Ne Ano
Fronta Ne Ano
Synonymum Ne Ano
Typ (alias a typ definovaný uživatelem CLR) Ne Ano
Kolekce schémat XML Ne Ano
Funkce Partition Ne Ano

1 Tabulka je sledována jako referenční entita pouze tehdy, když odkazuje na Transact-SQL modul, uživatelem definovaný typ nebo kolekci XML schématu v definici vypočítaného sloupce, CHECK omezení nebo DEFAULT omezení.

2 Každý sloupec použitý v predikátu filtru je sledován jako referenční entita.

3 Číslované uložené procedury s celočíselnou hodnotou větší než 1 nejsou sledovány ani jako referencující, ani jako referencovaná entita.

Dovolení

Vyžaduje VIEW povolení DEFINITION v databázi a SELECT povolení zapnuté sys.sql_expression_dependencies pro databázi. Ve výchozím nastavení je oprávnění SELECT uděleno pouze členům db_owner pevné databázové role. Pokud jsou oprávnění SELECT a VIEW DEFINITION udělena jinému uživateli, může příjemce zobrazit všechny závislosti v databázi.

Příklady

A. Vraťte entity, na které odkazuje jiná entita

Následující příklad vrátí tabulky a sloupce odkazované v zobrazení Production.vProductAndDescription. Zobrazení závisí na entitách (tabulkách a sloupcích) vrácených ve sloupcích referenced_entity_name a 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');

B. Vraťte entity, které odkazují na jinou entitu

Následující příklad vrátí entity, které odkazují na tabulku Production.Product. Entity vrácené ve sloupci referencing_entity_name závisí na Product tabulce.

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');

C. Vrácení závislostí mezi databázemi

Následující příklad vrátí všechny závislosti mezi databázemi. Příklad nejprve vytvoří databázi db1 a dvě uložené procedury, které odkazují na tabulky v databázích db2 a db3. Tabulka sys.sql_expression_dependencies se pak dotazuje, aby hlásila závislosti mezi postupy a tabulkami mezi databázemi. NULL je vrácen ve sloupci referenced_schema_name pro odkazovanou entitu t3 , protože název schématu není pro tuto entitu v definici procedury specifikován.

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;