Sdílet prostřednictvím


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 Názvy entit jsou hlášeny; ID entit však nejsou vyřešena.

  • 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 aktivuje v kontextu hlavní databáze.

Název sloupce Datový typ Popis
referencing_id int ID odkazující entity. Není možné použít hodnotu null.
referencing_minor_id int ID sloupce, pokud odkazující entita je sloupec; jinak 0. Není možné použít hodnotu null.
referencing_class tinyint Třída odkazující entity

1 = Objekt nebo sloupec

12 = Trigger DDL databáze

13 = Trigger DDL serveru

Není možné použít hodnotu null.
referencing_class_desc nvarchar(60) Popis třídy odkazující entity.

OBJECT_OR_COLUMN

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER

Není možné použít hodnotu null.
is_schema_bound_reference bitová 1 = Odkazovaná entita je svázaná se schématem.

0 = Odkazovaná entita není svázaná se schématem.

Není možné použít hodnotu null.
referenced_class tinyint Třída odkazované entity

1 = Objekt nebo sloupec

6 = Typ

10 = kolekce schémat XML

21 = Funkce Partition

Není možné použít hodnotu null.
referenced_class_desc nvarchar(60) Popis třídy odkazované entity

OBJECT_OR_COLUMN

TYP

XML_SCHEMA_COLLECTION

PARTITION_FUNCTION

Není možné použít hodnotu null.
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.

HODNOTA NULL pro nesdílené entity, na které byla entita odkazována bez zadání názvu čtyř částí.

Hodnota NULL pro entity vázané na schéma, protože musí být ve stejné databázi, a proto lze definovat pouze pomocí dvoudílné (schema.object) názvu.
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.

Hodnota NULL pro odkazy vázané na jiné schéma, pokud je zadána pomocí názvu jedné nebo dvoudílné části.

Hodnota NULL pro entity vázané na schéma, protože musí být ve stejné databázi, a proto lze definovat pouze pomocí dvoudílné (schema.object) názvu.
referenced_schema_name sysname Schéma, ve kterém odkazovaná entita patří

HODNOTA NULL pro odkazy vázané na jiné schéma, ve kterých byla entita odkazována bez zadání názvu schématu.

Nikdy null pro odkazy vázané na schéma, protože entity vázané na schéma musí být definovány a odkazovány pomocí názvu dvou částí.
referenced_entity_name sysname Název odkazované entity Není možné použít hodnotu null.
referenced_id int ID odkazované entity. Hodnota tohoto sloupce nikdy není null pro odkazy vázané na schéma. Hodnota tohoto sloupce je vždy NULL pro odkazy mezi servery a křížovými databázemi.

Hodnota NULL pro odkazy v databázi, pokud id nelze určit. U odkazů, které nejsou vá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í možné použít hodnotu null.

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ě referenced_id má hodnotu NULL.

0 = ID odkazované 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 odkaz je nejednoznačný a dokáže přeložit za běhu na uživatelem definovanou funkci, uživatelem definovaný typ (UDT) nebo odkaz xquery 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 se uložená procedura nespustí, není známo, zda Sales.GetOrder() je uživatelem definovaná funkce ve schématu Sales nebo sloupci s názvem Sales typu UDT s metodou s názvem GetOrder().

1 = Odkaz je nejednoznačný.

0 = Odkaz je jednoznačný nebo entita může být úspěšně vázána při zavolání zobrazení.

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ávislostech se nevytvořily ani neuchovávají pro pravidla, výchozí hodnoty, dočasné tabulky, dočasné uložené procedury nebo 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 Ano* Ano
Pohled Ano Ano
Filtrovaný index Ano** Ne
Filtrované statistiky Ano** Ne
Transact-SQL uložená procedura*** 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

* Tabulka se sleduje jako odkazující entita pouze v případě, že odkazuje na modul Transact-SQL, uživatelem definovaný typ nebo kolekci schématu XML v definici počítaného sloupce, omezení CHECK nebo VÝCHOZÍ omezení.

** Každý sloupec použitý v predikátu filtru je sledován jako odkazující entita.

Číslovaný uložených procedur s celočíselnou hodnotou větší než 1 se nesleduje jako odkazující nebo odkazovaná entita.

Dovolení

Vyžaduje oprávnění VIEW DEFINITION pro databázi a oprávnění SELECT pro 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. Vrácení entit odkazovaných jinou entitou

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

B. Vrácení entit, 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');  
GO  
  

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. Všimněte si, že hodnota NULL je vrácena ve sloupci referenced_schema_name pro odkazovanou entitu t3, protože název schématu nebyl pro tuto entitu zadán v definici 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  
  

Viz také

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