Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Istanza gestita di SQL di Azure
endpoint di analisi SQL di Azure Synapse Analytics Platform System (PDW)
in Microsoft Fabric Warehouse in Microsoft Fabric
Contiene una riga per ogni dipendenza in base al nome in un'entità definita dall'utente nel database corrente. Sono incluse le dipendenze tra funzioni definite dall'utente scalari compilate in modo nativo e altri moduli di SQL Server. Una dipendenza tra due entità viene creata quando un'entità, denominata entità a cui si fa riferimento, viene visualizzata per nome in un'espressione SQL persistente di un'altra entità, denominata entità di riferimento. Ad esempio, quando viene fatto riferimento a una tabella nella definizione di una vista, la vista, ovvero l'entità di riferimento, dipende dalla tabella, ovvero l'entità a cui si fa riferimento. Se la tabella viene eliminata, la vista non è utilizzabile.
Per altre informazioni, vedere Funzioni scalari definite dall'utente per OLTP in memoria.
È possibile utilizzare questa vista del catalogo per creare report relativi alle informazioni sulle dipendenze per le entità seguenti:
Entità associate a schema.
Entità non associate a schema.
Entità tra database e tra server. I nomi delle entità sono riportati; tuttavia, gli ID delle entità non vengono risolti.
Dipendenze a livello di colonna relative alle entità associate a schema. Le dipendenze a livello di colonna per gli oggetti non associati a schema possono essere restituite tramite sys.dm_sql_referenced_entities.
Il DDL a livello server si attiva quando si trova nel contesto del
masterdatabase.
| Nome colonna | Tipo di dati | Descrizione |
|---|---|---|
referencing_id |
int | ID dell'entità di riferimento. Non ammette valori NULL. |
referencing_minor_id |
int | ID di colonna quando l'entità di riferimento è una colonna, in caso contrario, 0. Non ammette valori NULL. |
referencing_class |
tinyint | Classe dell'entità di riferimento.1 = Oggetto o colonna12 = Trigger DDL del database13 = Trigger DDL serverNon ammette valori NULL. |
referencing_class_desc |
nvarchar(60) | Descrizione della classe dell'entità di riferimento.OBJECT_OR_COLUMNDATABASE_DDL_TRIGGERSERVER_DDL_TRIGGERNon ammette valori NULL. |
is_schema_bound_reference |
bit |
1 = L'entità di riferimento è legata allo schema.0 = L'entità di riferimento non è legata allo schema.Non ammette valori NULL. |
referenced_class |
tinyint | Classe dell'entità con riferimenti.1 = Oggetto o colonna6 = Tipo7 = Indice10 = Collezione di schema XML21 = Funzione di partizioneNon ammette valori NULL. |
referenced_class_desc |
nvarchar(60) | Descrizione della classe dell'entità a cui viene fatto riferimento.OBJECT_OR_COLUMNTYPEINDEXXML_SCHEMA_COLLECTIONPARTITION_FUNCTIONNon ammette valori NULL. |
referenced_server_name |
sysname | Nome del server dell'entità a cui viene fatto riferimento. Questa colonna viene popolata per le dipendenze tra server eseguite specificando un nome valido composto da quattro parti. Per informazioni sui nomi multipart, vedere Convenzioni della sintassi Transact-SQL. NULL per entità non legate allo schema per le quali l'entità era citata senza specificare un nome in quattro parti.NULL per entità legate allo schema perché devono trovarsi nello stesso database e quindi possono essere definite solo usando un nome a due parti (schema.object). |
referenced_database_name |
sysname | Nome del database dell'entità a cui viene fatto riferimento. Questa colonna viene popolata per i riferimenti tra database o tra server eseguiti specificando un nome valido composto da tre o quattro parti. NULL per riferimenti non legati allo schema quando specificati usando un nome a una o due parti.NULLper entità legate allo schema, perché devono trovarsi nello stesso database e quindi possono essere definite solo usando uno schema a due parti.oggetto) nome. |
referenced_schema_name |
sysname | Schema a cui appartiene l'entità a cui viene fatto riferimento.NULL per riferimenti non legati allo schema in cui l'entità era citata senza specificare il nome dello schema.Mai NULL per riferimenti legati allo schema perché le entità legate allo schema devono essere definite e referenziate usando un nome a due parti. |
referenced_entity_name |
sysname | Nome dell'entità a cui viene fatto riferimento. Non ammette valori NULL. |
referenced_id |
int | ID dell'entità a cui viene fatto riferimento. Il valore di questa colonna non è mai NULL per riferimenti legati allo schema. Il valore di questa colonna è sempre NULL per riferimenti cross-server e cross-database.NULL per riferimenti all'interno del database se l'ID non può essere determinato. Per riferimenti non legati allo schema, l'ID non può essere risolto nei seguenti casi:L'entità di riferimento non esiste nel database. Lo schema dell'entità a cui si fa riferimento dipende dallo schema del chiamante e viene risolto in fase di esecuzione. In questo caso, is_caller_dependent viene impostato su 1. |
referenced_minor_id |
int | ID della colonna con riferimenti quando l'entità di riferimento è una colonna; in caso contrario il valore è 0. Non ammette valori NULL. Un'entità a cui viene fatto riferimento è una colonna, se il nome nell'entità di riferimento identifica una colonna o se l'entità padre viene utilizzata in un'istruzione SELECT *. |
is_caller_dependent |
bit | Indica che l'associazione di schemi per l'entità con riferimenti si verifica in fase di esecuzione; pertanto, la risoluzione dell'ID dell'entità dipende dallo schema del chiamante. Questo avviene quando l'entità con riferimenti è una stored procedure, una stored procedure estesa o una funzione definita dall'utente non associata a schema chiamata all'interno di un'istruzione EXECUTE.1 = L'entità di riferimento dipende dal chiamante e viene risolta a runtime. In questo caso, referenced_id è NULL.0 = L'ID dell'entità di riferimento non dipende dal chiamante.Il valore è sempre 0 per i riferimenti associati a schemi e tra database e tra server che indicano in modo esplicito un nome schema. Ad esempio, un riferimento a un'entità nel formato EXEC MyDatabase.MySchema.MyProc non dipende dal chiamante. Tuttavia, un riferimento nel formato EXEC MyDatabase..MyProc è dipendente dal chiamante. |
is_ambiguous |
bit | Indica che il riferimento è ambiguo e può risolversi a tempo di esecuzione in una funzione definita dall'utente, un tipo definito dall'utente (UDT) o un riferimento XQuery a una colonna di tipo xml. Ad esempio, si supponga che l'istruzione SELECT Sales.GetOrder() FROM Sales.MySales sia stata definita in una stored procedure. Fino all'esecuzione della stored procedure, non si sa se Sales.GetOrder() sia una funzione definita dall'utente nello Sales schema o una colonna chiamata Sales di tipo UDT con un metodo chiamato GetOrder().1 = Il riferimento è ambiguo.0 = Il riferimento è univoco oppure l'entità può essere vincolata con successo quando viene chiamata la vista.Il valore è sempre 0 per i riferimenti associati a schema. |
Osservazioni:
Nella tabella seguente sono elencati i tipi di entità per i quali vengono create e gestite le informazioni sulle dipendenze. Le informazioni sulle dipendenze non vengono create o mantenute per regole, impostazioni predefinite, tabelle temporanee, stored procedure temporanee o oggetti di sistema.
Nota
Azure Synapse Analytics e Parallel Data Warehouse supportano tabelle, viste, statistiche filtrate e tipi di entità stored procedure Transact-SQL da questo elenco. Le informazioni sulle dipendenze vengono create e gestite solo per tabelle, viste e statistiche filtrate.
| Tipo di entità | Entità di riferimento | Entità con riferimenti |
|---|---|---|
| Tabella | Sì1 | Sì |
| Visualizza | Sì | Sì |
| Indice filtrato | Sì2 | No |
| Statistiche filtrate | Sì2 | No |
| Transact-SQL proceduramemorizzata 3 | Sì | Sì |
| stored procedure CLR | No | Sì |
| Funzione transact-SQL definita dall'utente | Sì | Sì |
| Funzione CLR definita dall'utente | No | Sì |
| Trigger CLR (DML e DDL) | No | No |
| Trigger DML Transact-SQL | Sì | No |
| Trigger DDL a livello di database Transact-SQL | Sì | No |
| Trigger DDL a livello di server Transact-SQL | Sì | No |
| Stored procedure estese | No | Sì |
| Queue | No | Sì |
| Sinonimo | No | Sì |
| Tipo (alias e tipo di CLR definito dall'utente) | No | Sì |
| Raccolta di schemi XML | No | Sì |
| Funzione di partizione | No | Sì |
1 Una tabella viene tracciata come entità di riferimento solo quando fa riferimento a un modulo Transact-SQL, a un tipo definito dall'utente o a una collezione di schema XML nella definizione di colonna calcolata, vincolo CHECK o DEFAULT vincolo.
2 Ogni colonna utilizzata nel predicato del filtro viene tracciata come entità di riferimento.
3 Le stored procedure numerate con valore intero maggiore di 1 non vengono tracciate né come entità di riferimento né come di riferimento né come entità di riferimento.
Autorizzazioni
Richiede VIEW il permesso DEFINITION sul database e il permesso SELECT attivo sys.sql_expression_dependencies per il database. L'autorizzazione SELECT è concessa per impostazione predefinita solo ai membri del ruolo predefinito del database db_owner . Quando vengono concesse autorizzazioni SELECT e VIEW DEFINITION a un altro utente, l'utente autorizzato può visualizzare tutte le dipendenze nel database.
Esempi
R. Restituire entità che sono citate da un'altra entità
Nell'esempio seguente sono restituite le tabelle e colonne con riferimenti nella vista Production.vProductAndDescription. La vista dipende dalle entità (tabelle e colonne) restituite nelle colonne referenced_entity_name e 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. Restituire entità che fanno riferimento a un'altra entità
Nell'esempio seguente vengono restituite le entità che fanno riferimento alla tabella Production.Product. Le entità restituite nella colonna referencing_entity_name dipendono dalla tabella 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');
C. Restituire dipendenze cross-database
Nell'esempio seguente vengono restituite tutte le dipendenze tra database. L'esempio prima crea il database db1 e due stored procedure che fanno riferimento alle tabelle nei database db2 e db3. Sulla tabella sys.sql_expression_dependencies viene quindi eseguita una query per riportare le dipendenze tra database tra le procedure e le tabelle.
NULL viene restituito nella referenced_schema_name colonna per l'entità t3 di riferimento perché un nome di schema non è specificato per quell'entità nella definizione della procedura.
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;