sys.dm_sql_referenced_entities (Transact-SQL)
Restituisce una riga per ogni entità definita dall'utente indicata dal nome della definizione dell'entità di riferimento specificata. Una dipendenza tra due entità viene creata quando un'entità definita dall'utente, detta entità con riferimenti, viene visualizzata in base al nome in un'espressione SQL persistente di un'altra entità definita dall'utente, detta entità di riferimento. Ad esempio, se una stored procedure è l'entità di riferimento specificata, questa funzione restituisce tutte le entità definite dall'utente indicate nella stored procedure, ad esempio tabelle, viste, tipi definiti dall'utente (UDT) o altre stored procedure.
È possibile utilizzare questa funzione a gestione dinamica per creare un report sui seguenti tipi di entità indicati dall'entità di riferimento specificata:
Entità associate allo schema
Entità non associate allo schema
Entità tra database e tra server
Dipendenze a livello di colonna relative alle entità associate e non associate allo schema
Tipi definiti dall'utente [alias e CLR definito dall'utente]
Raccolta di schemi XML
Funzioni di partizione
Sintassi
sys.dm_sql_referenced_entities (
' [ schema_name. ] referencing_entity_name ' , ' <referencing_class> ' )
<referencing_class> ::=
{
OBJECT
| DATABASE_DDL_TRIGGER
| SERVER_DDL_TRIGGER
}
Argomenti
[ schema_name. ] referencing_entity_name
Nome dell'entità di riferimento. schema_name è obbligatorio quando la classe di riferimento è OBJECT.schema_name.referencing_entity_name è di tipo nvarchar(517).
<classe_riferimento> ::= { OBJECT | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER }
Classe dell'entità di riferimento specificata. È possibile specificare solo una classe per istruzione.<referencing_class> è di tipo nvarchar(60).
Tabella restituita
Nome colonna |
Tipo di dati |
Descrizione |
---|---|---|
referencing_minor_id |
int |
ID di colonna quando l'entità di riferimento è una colonna, in caso contrario, 0. Non ammette valori Null. |
referenced_server_name |
sysname |
Nome del server dell'entità cui viene fatto riferimento. Questa colonna viene popolata per le dipendenze tra server eseguite specificando un nome valido in quattro parti. Per informazioni sui nomi composti da più parti, vedere Convenzioni della sintassi Transact-SQL (Transact-SQL). Valore NULL per le dipendenze non associate a schemi per cui è stato fatto riferimento all'entità senza specificare un nome in quattro parti. NULL per le entità associate a schemi, in quanto devono essere incluse nello stesso database e pertanto possono essere definite utilizzando solo un nome in due parti (schema.object). |
referenced_database_name |
sysname |
Nome del database dell'entità cui viene fatto riferimento. Questa colonna viene popolata per i riferimenti tra database o tra server eseguiti specificando un nome valido in tre o quattro parti. NULL per i riferimenti non associati a schemi che vengono specificati utilizzando un nome in una o due parti. NULL per le entità associate a schemi, in quanto devono essere incluse nello stesso database e pertanto possono essere definite utilizzando solo un nome in due parti (schema.object). |
referenced_schema_name |
sysname |
Schema cui appartiene l'entità cui viene fatto riferimento. NULL per i riferimenti non associati a schemi in cui è stato fatto riferimento all'entità senza specificare il nome dello schema. Il valore non è mai NULL per i riferimenti associati a schemi. |
referenced_entity_name |
sysname |
Nome dell'entità cui viene fatto riferimento. Non ammette valori Null. |
referenced_minor_name |
sysname |
Nome della colonna quando l'entità a cui viene fatto riferimento è una colonna; in caso contrario, NULL. referenced_minor_name è NULL, ad esempio, nella riga che elenca l'entità stessa cui viene fatto riferimento. Un'entità cui viene fatto riferimento è una colonna quando una colonna è identificata dal nome nell'entità di riferimento o quando l'entità padre viene utilizzata in un'istruzione SELECT *. |
referenced_id |
int |
ID dell'entità cui viene fatto riferimento. Quando referenced_minor_id è diverso da 0, referenced_id è l'entità in cui viene definita la colonna. Il valore è sempre NULL per i riferimenti tra server. NULL per riferimenti tra database quando non è possibile determinare l'ID perché il database non è in linea o l'entità non può essere associata. NULL per i riferimenti all'interno del database se non è possibile determinare l'ID. Per i riferimenti non associati a schemi, non è possibile risolvere l'ID nei casi seguenti:
Il valore non è mai NULL per riferimenti associati a schemi. |
referenced_minor_id |
int |
ID della colonna quando l'entità a cui viene fatto riferimento è una colonna; in caso contrario, 0. referenced_minor_is è 0, ad esempio, nella riga che elenca l'entità stessa cui viene fatto riferimento. Per i riferimenti non associati a schemi, le dipendenze della colonna vengono indicate solo quando è possibile associare tutte le entità cui viene fatto riferimento. Se non è possibile associare una di tali entità, non viene segnalata alcuna dipendenza a livello di colonna e il valore di referenced_minor_id è 0. Vedere l'esempio D. |
referenced_class |
tinyint |
Classe dell'entità con riferimenti. 1 = Oggetto o colonna 6 = Tipo 10 = Raccolta di schemi XML 21 = Funzione di partizione |
referenced_class_desc |
nvarchar(60) |
Descrizione della classe dell'entità cui viene fatto riferimento. OBJECT_OR_COLUMN TYPE XML_SCHEMA_COLLECTION PARTITION_FUNCTION |
is_caller_dependent |
bit |
Indica che l'associazione di schemi per l'entità cui viene fatto riferimento si verifica in fase di esecuzione. Di conseguenza, la risoluzione dell'ID dell'entità dipende dallo schema del chiamante. Ciò avviene quando l'entità cui viene fatto riferimento è una stored procedure, una stored procedure estesa o una funzione definita dall'utente chiamata all'interno di un'istruzione EXECUTE. 1 = L'entità cui viene fatto riferimento è dipendente dal chiamante e viene risolta in fase di esecuzione. In questo caso, il valore di referenced_id è NULL. 0 = L'ID dell'entità cui viene fatto riferimento non è dipendente dal chiamante. Il valore è sempre 0 per i riferimenti associati a schemi e i riferimenti tra database e tra server che indicano in modo esplicito un nome di schema. Un riferimento a un'entità in formato EXEC MyDatabase.MySchema.MyProc, ad esempio, non è dipendente dal chiamante. Un riferimento in formato EXEC MyDatabase..MyProc, tuttavia, è dipendente dal chiamante. |
is_ambiguous |
bit |
Indica che il riferimento è ambiguo e che può essere risolto in fase di esecuzione in una funzione definita dall'utente, in un tipo definito dall'utente (UDT) o in un riferimento xquery a una colonna di tipo xml. Si supponga, ad esempio, che l'istruzione SELECT Sales.GetOrder() FROM Sales.MySales sia definita in una stored procedure. Fino a quando la stored procedure non viene eseguita, non è possibile individuare se Sales.GetOrder() è una funzione definita dall'utente nello schema Sales o una colonna denominata Sales di tipo definito dall'utente con un metodo GetOrder(). 1 = Il riferimento a una funzione definita dall'utente o al metodo del tipo definito dall'utente (UDT) della colonna è ambiguo. 0 = Il riferimento non è ambiguo o l'entità può essere associata correttamente quando la funzione viene chiamata. Il valore è sempre 0 per i riferimenti associati allo schema. |
Eccezioni
In una delle seguenti condizioni restituisce un set di risultati vuoto:
Viene specificato un oggetto di sistema.
L'entità specificata non è presente nel database corrente.
L'entità specificata non fa riferimento ad alcuna entità.
Viene passato un parametro non valido.
Restituisce un errore quando l'entità di riferimento specificata è una stored procedure numerata.
Restituisce l'errore 2020 quando le dipendenze della colonna non possono essere risolte. Questo errore non impedisce alla query di restituire dipendenze a livello di oggetto. Per ulteriori informazioni, vedere Risoluzione dei problemi relativi alle dipendenze SQL.
Osservazioni
Questa funzione può essere eseguita nel contesto di qualsiasi database per restituire le entità che fanno riferimento a un trigger DDL a livello di server.
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 né gestite per regole, impostazioni predefinite, tabelle temporanee, stored procedure temporanee o oggetti di sistema.
Tipo di entità |
Entità di riferimento |
Entità cono riferimenti |
---|---|---|
Tabella |
Sì* |
Sì |
Vista |
Sì |
Sì |
Stored procedure Transact-SQL** |
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 Transact-SQL a livello di database |
Sì |
No |
Trigger DDL Transact-SQL a livello di server |
Sì |
No |
Stored procedure estese |
No |
Sì |
Coda |
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ì |
* Una tabella viene registrata come entità di riferimento solo quando fa riferimento a un modulo Transact-SQL, a un tipo definito dall'utente o a una raccolta di schemi XML nella definizione di una colonna calcolata, un vincolo CHECK o un vincolo DEFAULT.
** Le stored procedure numerate con un valore integer maggiore di 1 non vengono registrate come entità di riferimento o come entità con riferimenti.
Per ulteriori informazioni, vedere Informazioni sulle dipendenze SQL.
Autorizzazioni
È richiesta l'autorizzazione SELECT per sys.dm_sql_referenced_entities e l'autorizzazione VIEW DEFINITION per l'entità di riferimento. Per impostazione predefinita, l'autorizzazione SELECT è concessa al ruolo public. È richiesta l'autorizzazione VIEW DEFINITION per il database o un'autorizzazione ALTER ANY DATABASE DDL TRIGGER per il database corrente quando l'entità di riferimento è un trigger DDL a livello di database. È richiesta l'autorizzazione VIEW ANY DEFINITION per il server quando l'entità di riferimento è un trigger DDL a livello di server.
Esempi
A. Restituzione di entità cui fa riferimento un trigger DDL a livello di database
Nell'esempio seguente vengono restituite le entità (tabelle e colonne) cui fa riferimento il trigger DDL ddlDatabaseTriggerLog a livello di database.
USE AdventureWorks;
GO
SELECT referenced_schema_name, referenced_entity_name, referenced_minor_name,
referenced_minor_id, referenced_class_desc
FROM sys.dm_sql_referenced_entities ('ddlDatabaseTriggerLog', 'DATABASE_DDL_TRIGGER');
GO
B. Restituzione di entità cui fa riferimento un oggetto
Nell'esempio seguente vengono restituite le entità cui fa riferimento la funzione dbo.ufnGetContactInformation definita dall'utente.
USE AdventureWorks;
GO
SELECT referenced_schema_name, referenced_entity_name, referenced_minor_name,
referenced_minor_id, referenced_class_desc, is_caller_dependent, is_ambiguous
FROM sys.dm_sql_referenced_entities ('dbo.ufnGetContactInformation', 'OBJECT');
GO
C. Restituzione delle dipendenze della colonna
Nell'esempio seguente viene creata la tabella Table1 con la colonna calcolata c definita come somma delle colonne a e b. Viene quindi chiamata la vista sys.dm_sql_referenced_entities. La vista restituisce due righe, una per ogni colonna definita nella colonna calcolata.
USE AdventureWorks;
GO
CREATE TABLE dbo.Table1 (a int, b int, c AS a + b);
GO
SELECT referenced_schema_name AS schema_name,
referenced_entity_name AS table_name,
referenced_minor_name AS referenced_column,
COALESCE(COL_NAME(OBJECT_ID(N'dbo.Table1'),referencing_minor_id), 'N/A') AS referencing_column_name
FROM sys.dm_sql_referenced_entities ('dbo.Table1', 'OBJECT');
GO
-- Remove the table.
DROP TABLE dbo.Table1;
GO
Set di risultati:
schema_name table_name referenced_column referencing_column
----------- ---------- ----------------- ------------------
dbo Table1 a c
dbo Table1 b c
D. Restituzione delle dipendenze delle colonne non associate a schemi
Nell'esempio seguente viene eliminata Table1 e vengono create Table2 e la stored procedure Proc1. La procedura fa riferimento a Table2 e alla tabella Table1 inesistente. La vista sys.dm_sql_referenced_entities viene eseguita con la stored procedure specificata come entità di riferimento. Il set di risultati indica una riga per Table1 e Table2. Poiché Table1 non è presente, le dipendenze della colonna non possono essere risolte e viene restituito l'errore 2020.
USE AdventureWorks;
GO
IF OBJECT_ID ( 'dbo.Table1', 'U' ) IS NOT NULL
DROP TABLE dbo.Table1;
GO
CREATE TABLE dbo.Table2 (c1 int, c2 int);
GO
CREATE PROCEDURE dbo.Proc1 AS
SELECT a, b, c FROM Table1;
SELECT c1, c2 FROM Table2;
GO
SELECT referenced_id, referenced_entity_name AS table_name, referenced_minor_name AS referenced_column_name
FROM sys.dm_sql_referenced_entities ('dbo.Proc1', 'OBJECT');
GO
E. Dimostrazione della gestione delle dipendenze dinamiche
Nell'esempio seguente viene esteso l'esempio D per illustrare la gestione dinamica delle dipendenze. Nell'esempio viene prima ricreata Table1, eliminata nell'esempio D. Viene quindi rieseguita la vista sys.dm_sql_referenced_entities con la stored procedure specificata come entità di riferimento. Il set di risultati indica che vengono restituite entrambe le tabelle e le rispettive colonne definite nella stored procedure.
USE AdventureWorks;
GO
CREATE TABLE Table1 (a int, b int, c AS a + b);
GO
SELECT referenced_id, referenced_entity_name AS table_name, referenced_minor_name as column_name
FROM sys.dm_sql_referenced_entities ('dbo.Proc1', 'OBJECT');
GO
DROP TABLE Table1, Table2;
DROP PROC Proc1;
GO
Set di risultati:
referenced_id, table_name, column_name
------------- ----------- -----------
2139154566 Table1 NULL
2139154566 Table1 a
2139154566 Table1 b
2139154566 Table1 c
2707154552 Table2 NULL
2707154552 Table2 c1
2707154552 Table2 c2
Cronologia modifiche
Aggiornamento del contenuto |
---|
Rimozione dalla sezione "Osservazioni" del passaggio indicante che le dipendenze della colonna non vengono registrate per le funzioni CLR con valori di tabella. |
Correzione relativa al tipo di dati del parametro referencing_entity_name. |
Vedere anche