sys.sql_expression_dependencies (Transact-SQL)
gäller för:SQL ServerAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft Fabric
Innehåller en rad för varje efternamnsberoende för en användardefinierad entitet i den aktuella databasen. Detta omfattar beroenden mellan internt kompilerade, skalära användardefinierade funktioner och andra SQL Server-moduler. Ett beroende mellan två entiteter skapas när en entitet, kallad den refererade entiteten, visas efter namn i ett beständiga SQL-uttryck för en annan entitet som kallas refererande entitet. När en tabell till exempel refereras till i definitionen av en vy beror vyn, som refererande entitet, på tabellen, den refererade entiteten. Om tabellen tas bort är vyn oanvändbar.
Mer information finns i Scalar User-Defined Functions for In-Memory OLTP.
Du kan använda den här katalogvyn för att rapportera beroendeinformation för följande entiteter:
Schemabundna entiteter.
Icke-schemabundna entiteter.
Korsdatabas- och korsserverentiteter. Entitetsnamn rapporteras. Entitets-ID:n löses dock inte.
Beroenden på kolumnnivå för schemabundna entiteter. Beroenden på kolumnnivå för icke-schemabundna objekt kan returneras med hjälp av sys.dm_sql_referenced_entities.
DDL på servernivå utlöses i kontexten för huvuddatabasen.
Kolumnnamn | Datatyp | Beskrivning |
---|---|---|
referencing_id | int | ID för den refererande entiteten. Kan inte vara null. |
referencing_minor_id | int | Kolumn-ID när den refererande entiteten är en kolumn. annars 0. Kan inte vara null. |
referencing_class | pytteliten | Klass för den refererande entiteten. 1 = Objekt eller kolumn 12 = DDL-utlösare för databas 13 = DDL-utlösare för server Kan inte vara null. |
referencing_class_desc | nvarchar(60) | Beskrivning av klassen för refererande entitet. OBJECT_OR_COLUMN DATABASE_DDL_TRIGGER SERVER_DDL_TRIGGER Kan inte vara null. |
is_schema_bound_reference | bit | 1 = Den refererade entiteten är schemabunden. 0 = Den refererade entiteten är inte schemabunden. Kan inte vara null. |
referenced_class | pytteliten | Klass för den refererade entiteten. 1 = Objekt eller kolumn 6 = Typ 10 = XML-schemasamling 21 = Partitionsfunktion Kan inte vara null. |
referenced_class_desc | nvarchar(60) | Beskrivning av klass för refererad entitet. OBJECT_OR_COLUMN TYP XML_SCHEMA_COLLECTION PARTITION_FUNCTION Kan inte vara null. |
referenced_server_name | sysname | Namnet på servern för den refererade entiteten. Den här kolumnen fylls i för beroenden mellan servrar som skapas genom att ange ett giltigt namn i fyra delar. Information om flerapartsnamn finns i Transact-SQL syntaxkonventioner. NULL för icke-schemabundna entiteter som entiteten refererades till utan att ange ett namn i fyra delar. NULL för schemabundna entiteter eftersom de måste finnas i samma databas och därför bara kan definieras med hjälp av ett tvådelade (schema.object) namn. |
referenced_database_name | sysname | Namnet på databasen för den refererade entiteten. Den här kolumnen fylls i för korsdatabas- eller korsserverreferenser som görs genom att ange ett giltigt namn i tre delar eller fyra delar. NULL för icke-schemabundna referenser när det anges med ett endels- eller tvådelsnamn. NULL för schemabundna entiteter eftersom de måste finnas i samma databas och därför bara kan definieras med hjälp av ett tvådelade (schema.object) namn. |
referenced_schema_name | sysname | Schema där den refererade entiteten tillhör. NULL för icke-schemabundna referenser där entiteten refererades utan att ange schemanamnet. Aldrig NULL för schemabundna referenser eftersom schemabundna entiteter måste definieras och refereras med hjälp av ett tvådelade namn. |
referenced_entity_name | sysname | Namnet på den refererade entiteten. Kan inte vara null. |
referenced_id | int | ID för den refererade entiteten. Värdet för den här kolumnen är aldrig NULL för schemabundna referenser. Värdet för den här kolumnen är alltid NULL för korsserverreferenser och korsdatabasreferenser. NULL för referenser i databasen om ID:t inte kan fastställas. För icke-schemabundna referenser kan ID:t inte lösas i följande fall: Den refererade entiteten finns inte i databasen. Schemat för den refererade entiteten beror på anroparens schema och löses vid körning. I det här fallet är is_caller_dependent inställt på 1. |
referenced_minor_id | int | ID för den refererade kolumnen när referensentiteten är en kolumn. annars 0. Kan inte vara null. En refererad entitet är en kolumn när en kolumn identifieras med namn i den refererande entiteten, eller när den överordnade entiteten används i en SELECT * -instruktion. |
is_caller_dependent | bit | Anger att schemabindningen för den refererade entiteten sker vid körning. Därför beror lösningen på entitets-ID:t på uppringarens schema. Detta inträffar när den refererade entiteten är en lagrad procedur, en utökad lagrad procedur eller en icke-schemabunden användardefinierad funktion som anropas i en EXECUTE-instruktion. 1 = Den refererade entiteten är anroparberoende och löses vid körning. I det här fallet är referenced_id NULL. 0 = Det refererade entitets-ID:t är inte anroparberoende. Alltid 0 för schemabundna referenser och för korsdatabas- och korsserverreferenser som uttryckligen anger ett schemanamn. Till exempel är en referens till en entitet i formatet EXEC MyDatabase.MySchema.MyProc inte anroparberoende. En referens i formatet EXEC MyDatabase..MyProc är dock anroparberoende. |
is_ambiguous | bit | Anger att referensen är tvetydig och kan matcha vid körning till en användardefinierad funktion, en användardefinierad typ (UDT) eller en xquery-referens till en kolumn av typen xml-. Anta till exempel att instruktionen SELECT Sales.GetOrder() FROM Sales.MySales definieras i en lagrad procedur. Innan den lagrade proceduren har körts är det inte känt om Sales.GetOrder() är en användardefinierad funktion i Sales -schemat eller kolumnen med namnet Sales av typen UDT med en metod med namnet GetOrder() .1 = Referensen är tvetydig. 0 = Referensen är entydig eller så kan entiteten bindas när vyn anropas. Alltid 0 för schemabundna referenser. |
Anmärkningar
I följande tabell visas de typer av entiteter för vilka beroendeinformation skapas och underhålls. Beroendeinformation skapas eller underhålls inte för regler, standardvärden, temporära tabeller, tillfälliga lagrade procedurer eller systemobjekt.
Not
Azure Synapse Analytics och Parallel Data Warehouse stöder tabeller, vyer, filtrerad statistik och Transact-SQL lagrade procedurer från den här listan. Beroendeinformation skapas och underhålls endast för tabeller, vyer och filtrerad statistik.
Entitetstyp | Referera till entitet | Refererad entitet |
---|---|---|
Bord | Ja* | Ja |
Utsikt | Ja | Ja |
Filtrerat index | Ja** | Nej |
Filtrerad statistik | Ja** | Nej |
Transact-SQL lagrad procedur*** | Ja | Ja |
CLR-lagrad procedur | Nej | Ja |
Transact-SQL användardefinierad funktion | Ja | Ja |
Användardefinierad CLR-funktion | Nej | Ja |
CLR-utlösare (DML och DDL) | Nej | Nej |
Transact-SQL DML-utlösare | Ja | Nej |
Transact-SQL DDL-utlösare på databasnivå | Ja | Nej |
Transact-SQL DDL-utlösare på servernivå | Ja | Nej |
Utökade lagrade procedurer | Nej | Ja |
Kö | Nej | Ja |
Synonym | Nej | Ja |
Typ (alias och CLR-användardefinierad typ) | Nej | Ja |
XML-schemasamling | Nej | Ja |
Partitionsfunktion | Nej | Ja |
* En tabell spåras endast som en refererande entitet när den refererar till en Transact-SQL modul, användardefinierad typ eller XML-schemasamling i definitionen av en beräknad kolumn, CHECK-begränsning eller STANDARDvillkor.
** Varje kolumn som används i filterpredikatet spåras som en refererande entitet.
Numrerade lagrade procedurer med ett heltalsvärde större än 1 spåras inte som en refererande eller refererad entitet.
Behörigheter
Kräver VIEW DEFINITION-behörighet för databasen och SELECT-behörighet för sys.sql_expression_dependencies för databasen. Som standard beviljas SELECT-behörighet endast medlemmar i den db_owner fasta databasrollen. När behörigheterna SELECT och VIEW DEFINITION beviljas till en annan användare kan den beviljade användaren visa alla beroenden i databasen.
Exempel
A. Returnerar entiteter som refereras av en annan entitet
I följande exempel returneras de tabeller och kolumner som refereras i vyn Production.vProductAndDescription
. Vyn beror på vilka entiteter (tabeller och kolumner) som returneras i kolumnerna referenced_entity_name
och 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. Returnerar entiteter som refererar till en annan entitet
I följande exempel returneras de entiteter som refererar till tabellen Production.Product
. De entiteter som returneras i kolumnen referencing_entity_name
beror på tabellen 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. Returnerar beroenden mellan databaser
I följande exempel returneras alla beroenden mellan databaser. Exemplet skapar först databasen db1
och två lagrade procedurer som refererar till tabeller i databaserna db2
och db3
. Den sys.sql_expression_dependencies
tabellen efterfrågas sedan för att rapportera beroenden mellan databaser mellan procedurerna och tabellerna. Observera att NULL returneras i kolumnen referenced_schema_name
för den refererade entiteten t3
eftersom ett schemanamn inte angavs för den entiteten i definitionen av proceduren.
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
Se även
sys.dm_sql_referenced_entities (Transact-SQL)
sys.dm_sql_referencing_entities (Transact-SQL)