sys.sql_expressie_afhankelijkheden (Transact-SQL)

Van toepassing op:SQL ServerAzureSQL Managed InstanceAzureSynapse AnalyticsAnalyticsPlatform System (PDW)SQL analytics endpoint in Microsoft FabricWarehousein Microsoft Fabric

Bevat één rij voor elke bijnaam-afhankelijkheid van een door de gebruiker gedefinieerde entiteit in de huidige database. Dit omvat afhankelijkheden tussen native gecompileerde, door de gebruiker gedefinieerde scalair-functies en andere SQL Server-modules. Er ontstaat een afhankelijkheid tussen twee entiteiten wanneer één entiteit, de genoemde entiteit, bij naam verschijnt in een behouden SQL-expressie van een andere entiteit, genaamd de referentie-entiteit. Wanneer bijvoorbeeld een tabel wordt genoemd in de definitie van een view, hangt de view, als referentie-entiteit, af van de tabel, de gerefereerde entiteit. Als de tafel wordt weggelaten, is de weergave onbruikbaar.

Zie Scalaire User-Defined functies voor In-Memory OLTP voor meer informatie.

U kunt deze catalogusweergave gebruiken om afhankelijkheidsinformatie te rapporteren voor de volgende entiteiten:

  • Schema-gebonden entiteiten.

  • Entiteiten die niet aan schema's gebonden zijn.

  • Cross-database en cross-server entiteiten. Entiteitsnamen worden gerapporteerd; echter, entiteits-ID's worden niet opgelost.

  • Kolomniveau-afhankelijkheden van schema-gebonden entiteiten. Kolomniveau-afhankelijkheden voor niet-schema-gebonden objecten kunnen worden teruggegeven door gebruik te maken van sys.dm_sql_referenced_entities.

  • Serverniveau DDL wordt geactiveerd wanneer deze zich in de context van de master database bevindt.

Kolomnaam Gegevenstype Description
referencing_id int ID van de verwijzende entiteit. Niet nullwaarde.
referencing_minor_id int Kolom-ID wanneer de verwijzende entiteit een kolom is; anders 0. Niet nullwaarde.
referencing_class tinyint Klasse van de verwijzende entiteit.

1 = Object of kolom
12 = Database DDL-trigger
13 = Server DDL-trigger

Niet nullwaarde.
referencing_class_desc nvarchar(60) Beschrijving van de klasse van de referentie-entiteit.

OBJECT_OR_COLUMN
DATABASE_DDL_TRIGGER
SERVER_DDL_TRIGGER

Niet nullwaarde.
is_schema_bound_reference bit 1 = De gerefereerde entiteit is schema-gebonden.
0 = De gerefereerde entiteit is niet schema-gebonden.

Niet nullwaarde.
referenced_class tinyint Klasse van de verwezen entiteit.

1 = Object of kolom
6 = Type
7 = Index
10 = XML-schemaverzameling
21 = Partitiefunctie

Niet nullwaarde.
referenced_class_desc nvarchar(60) Beschrijving van de klasse van de gerefereerde entiteit.

OBJECT_OR_COLUMN
TYPE
INDEX
XML_SCHEMA_COLLECTION
PARTITION_FUNCTION

Niet nullwaarde.
referenced_server_name sysname Naam van de server van de genoemde entiteit.

Deze kolom wordt gevuld voor cross-serverafhankelijkheden die worden gemaakt door een geldige vierdelige naam te specificeren. Voor informatie over meervoudige namen, zie Transact-SQL syntaxisconventies.

NULL voor entiteiten zonder schema-gebonden entiteiten waarvoor de entiteit werd genoemd zonder een vierdelige naam te specificeren.

NULL voor schema-bound entities omdat ze in dezelfde database moeten zitten en daarom alleen kunnen worden gedefinieerd met een tweedelige (schema.object) naam.
referenced_database_name sysname Naam van de database van de genoemde entiteit.

Deze kolom wordt gevuld voor cross-database- of cross-serverreferenties die worden gemaakt door een geldige drie- of vierdelige naam te specificeren.

NULL voor niet-schema-gebonden referenties wanneer deze worden gespecificeerd met een naam die één of twee delen bevat.

NULL voor schema-gebonden entiteiten omdat ze in dezelfde database moeten zitten en daarom alleen kunnen worden gedefinieerd met een tweedelig (schema.object) naam.
referenced_schema_name sysname Schema waarin de verwezen entiteit thuishoort.

NULL voor niet-schema-gebonden referenties waarin de entiteit werd genoemd zonder de schemanaam te specificeren.

Nooit NULL voor schema-gebonden referenties, omdat schema-gebonden entiteiten gedefinieerd en verwezen moeten worden met een tweedelige naam.
referenced_entity_name sysname Naam van de genoemde entiteit. Niet nullwaarde.
referenced_id int ID van de genoemde entiteit. De waarde van deze kolom is nooit NULL bedoeld voor schema-gebonden referenties. De waarde van deze kolom is altijd NULL voor cross-server en cross-database referenties.

NULL voor referenties binnen de database als de ID niet kan worden vastgesteld. Voor niet-schema-gebonden referenties kan de ID in de volgende gevallen niet worden opgelost:

De gerefereerde entiteit bestaat niet in de database.

Het schema van de gerefereerde entiteit hangt af van het schema van de aanroeper en wordt tijdens de uitvoering opgelost. In dit geval is is_caller_dependent ingesteld op 1.
referenced_minor_id int ID van de gerefereerde kolom wanneer de verwijzende entiteit een kolom is; anders 0. Niet nullwaarde.

Een referentiede entiteit is een kolom wanneer een kolom wordt geïdentificeerd met naam in de referentie-entiteit, of wanneer de moederentiteit wordt gebruikt in een SELECT * statement.
is_caller_dependent bit Geeft aan dat schemabinding voor de gerefereerde entiteit tijdens runtime plaatsvindt; daarom hangt de resolutie van de entiteits-ID af van het schema van de aanroeper. Dit gebeurt wanneer de verwezen entiteit een opgeslagen procedure, uitgebreide opgeslagen procedure is, of een niet-schema-gebonden, door de gebruiker gedefinieerde functie die wordt aangeroepen in een uitvoerende instructie.

1 = De gerefereerde entiteit is afhankelijk van de aanroeper en wordt tijdens runtime opgelost. In dit geval is referenced_id .NULL

0 = De gerefereerde entiteits-ID is niet afhankelijk van de oproeper.

Altijd 0 voor schema-gebonden referenties en voor cross-database- en cross-serverreferenties die expliciet een schemanaam specificeren. Bijvoorbeeld, een verwijzing naar een entiteit in het formaat EXEC MyDatabase.MySchema.MyProc is niet afhankelijk van de aanroeper. Een referentie in het formaat EXEC MyDatabase..MyProc is echter afhankelijk van de aanroeper.
is_ambiguous bit Geeft aan dat de verwijzing ambigu is en tijdens uitvoering kan worden opgelost naar een door de gebruiker gedefinieerde functie, een door de gebruiker gedefinieerd type (UDT), of een XQuery-referentie naar een kolom van het type xml.

Stel bijvoorbeeld dat de verklaring SELECT Sales.GetOrder() FROM Sales.MySales is gedefinieerd in een opgeslagen procedure. Totdat de opgeslagen procedure is uitgevoerd, is het niet bekend of Sales.GetOrder() er een door de gebruiker gedefinieerde functie in het Sales schema of kolom met de naam Sales UDT is met een methode genaamd GetOrder().

1 = De referentie is dubbelzinnig.

0 = De referentie is ondubbelzinnig of de entiteit kan succesvol worden gebonden wanneer de weergave wordt aangeroepen.

Altijd 0 voor schema-gebonden referenties.

Remarks

De volgende tabel geeft een overzicht van de typen entiteiten waarvoor afhankelijkheidsinformatie wordt aangemaakt en onderhouden. Afhankelijkheidsinformatie wordt niet aangemaakt of onderhouden voor regels, standaardinstellingen, tijdelijke tabellen, tijdelijke opgeslagen procedures of systeemobjecten.

Note

Azure Synapse Analytics en Parallel Data Warehouse ondersteunen tabellen, weergaven, gefilterde statistieken en Transact-SQL opgeslagen procedures entiteitstypes uit deze lijst. Afhankelijkheidsinformatie wordt alleen gemaakt en onderhouden voor tabellen, weergaven en gefilterde statistieken.

Entiteitstype Referentie-entiteit Referentie entiteit
Table Ja1 Ja
View Ja Ja
Gefilterde index Ja2 No
Gefilterde statistieken Ja2 No
Transact-SQL opgeslagen procedure3 Ja Ja
CLR stored procedure No Ja
Transact-SQL door de gebruiker gedefinieerde functie Ja Ja
Door de gebruiker gedefinieerde functie van CLR No Ja
CLR-trigger (DML en DDL) No No
Transact-SQL DML-trigger Ja No
Transact-SQL database-niveau DDL-trigger Ja No
Transact-SQL serverniveau DDL-trigger Ja No
Uitgebreide opgeslagen procedures No Ja
Queue No Ja
Synonym No Ja
Type (alias en CLR-door de gebruiker gedefinieerd type) No Ja
XML-schemaverzameling No Ja
Partitionfunctie No Ja

1 Een tabel wordt alleen als referentie-entiteit bijgehouden wanneer deze verwijst naar een Transact-SQL module, door de gebruiker gedefinieerd type of XML-schemaverzameling in de definitie van een berekende kolom, CHECK-beperking of DEFAULT constraint.

2 Elke kolom die in het filterpredicaat wordt gebruikt, wordt gevolgd als een referentie-entiteit.

3 Genummerde opgeslagen procedures met een geheel getal groter dan 1 worden niet gevolgd als referentie- of referentieentiteit.

Permissions

Vereist VIEW DEFINITION-toestemming op de database en SELECT-toestemming op voor sys.sql_expression_dependencies de database. Select-machtigingen worden standaard alleen verleend aan leden van de db_owner vaste databaserol. Wanneer SELECT- en VIEW DEFINITION-machtigingen worden verleend aan een andere gebruiker, kan de grantee alle afhankelijkheden in de database bekijken.

Examples

A. Returneren entiteiten die door een andere entiteit worden aangeduid

Het volgende voorbeeld geeft de tabellen en kolommen terug die in de weergave Production.vProductAndDescriptionworden genoemd. De weergave hangt af van de entiteiten (tabellen en kolommen) die in de referenced_entity_name en-kolommen referenced_column_name worden teruggegeven.

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. Returneren entiteiten die verwijzen naar een andere entiteit

Het volgende voorbeeld geeft de entiteiten terug die naar de tabel Production.Productverwijzen. De entiteiten die in de kolom worden gegenereerd referencing_entity_name , zijn afhankelijk van de Product tabel.

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. Returneren cross-database afhankelijkheden

Het volgende voorbeeld geeft alle cross-database-afhankelijkheden terug. Het voorbeeld creëert eerst de database db1 en twee opgeslagen procedures die tabellen in de databases en db3refererendb2. De sys.sql_expression_dependencies tabel wordt vervolgens geraadpleegd om de cross-database afhankelijkheden tussen de procedures en de tabellen te rapporteren. NULL wordt teruggegeven in de referenced_schema_name kolom voor de gerefereerde entiteit t3 omdat er geen schemanaam voor die entiteit is gespecificeerd in de definitie van de procedure.

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;