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 | |
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 | |
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 | |
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 | |
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_referencing_entities (Transact-SQL)