sys.sql_expression_dependencies (Transact-SQL)
Contiene una riga per ogni dipendenza in base al nome in un'entità definita dall'utente nel database corrente. Una dipendenza tra due entità viene creata quando un'entità, detta entità con riferimenti, viene visualizzata in base al nome in un'espressione SQL persistente di un'altra entità, detta 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.
È 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 indicati; tuttavia, gli ID dell'entità non sono 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 utilizzando sys.dm_sql_referenced_entities.
Trigger DDL a livello di server se nel contesto del database master.
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 colonna 12 = Trigger DDL database 13 = Trigger DDL server Non ammette valori Null. |
referencing_class_desc |
nvarchar(60) |
Descrizione della classe dell'entità di riferimento. OBJECT_OR_COLUMN DATABASE_DDL_TRIGGER SERVER_DDL_TRIGGER Non ammette valori Null. |
is_schema_bound_reference |
bit |
1 = L'entità a cui si fa riferimento è associata a schema. 0 = L'entità a cui si fa riferimento non è associata a schema. Non ammette valori Null. |
referenced_class |
tinyint |
Classe dell'entità con riferimenti. 1 = Oggetto o colonna 6 = Tipo 10 = Raccolta di XML Schema 21 = Funzione di partizione Non ammette valori Null. |
referenced_class_desc |
nvarchar(60) |
Descrizione della classe dell'entità a cui viene fatto riferimento. OBJECT_OR_COLUMN TYPE XML_SCHEMA_COLLECTION PARTITION_FUNCTION Non 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 composti da più parti, vedere Convenzioni della sintassi Transact-SQL (Transact-SQL). Valore NULL per le entità non associate a schemi per le quali è stato fatto riferimento all'entità senza specificare un nome composto da quattro parti. Valore NULL per le entità associate a schemi perché devono essere presenti nello stesso database e pertanto possono essere definite solo utilizzando un nome composto da 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. Valore NULL per i riferimenti non associati a schemi che vengono specificati utilizzando un nome composto da una o due parti. Valore NULL per le entità associate a schemi perché devono essere presenti nello stesso database e pertanto possono essere definite solo utilizzando un nome composto da due parti (schema.object). |
referenced_schema_name |
sysname |
Schema a cui appartiene l'entità a cui viene fatto riferimento. Valore NULL per i riferimenti non associati a schemi in cui è stato fatto riferimento all'entità senza specificare il nome dello schema. Non è mai un valore NULL per i riferimenti associati a schemi perché le entità associate a schemi devono essere definite e riferite utilizzando un nome composto da 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. Valore sempre NULL per i riferimenti tra server e tra database. Valore 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 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à con riferimenti è dipendente dal chiamante e viene risolta in fase di esecuzione. In questo caso, referenced_id è NULL. 0 = L'ID dell'entità a cui viene fatto riferimento non è dipendente 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 è dipendente dal chiamante. Tuttavia, un riferimento nel formato EXEC MyDatabase..MyProc è dipendente dal chiamante. |
is_ambiguous |
bit |
Indica che il riferimento è ambiguo e 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. Ad esempio, si supponga che l'istruzione SELECT Sales.GetOrder() FROM Sales.MySales sia stata definita in una stored procedure. Durante l'esecuzione della stored procedure non è possibile sapere se Sales.GetOrder() è una funzione definita dall'utente nello schema Sales o una colonna Sales di tipo definito dall'utente con un metodo GetOrder(). 1 = Il riferimento è ambiguo. 0 = Il riferimento non è ambiguo o l'entità può essere associata correttamente quando la vista viene chiamata. 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 né gestite per regole, impostazioni predefinite, tabelle temporanee, stored procedure temporanee o oggetti di sistema.
Tipo di entità |
Entità di riferimento |
Entità con riferimenti |
---|---|---|
Tabella |
Sì* |
Sì |
Vista |
Sì |
Sì |
Indice filtrato |
Sì** |
No |
Statistiche filtrate |
Sì** |
No |
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 XML Schema |
No |
Sì |
Funzione di partizione |
No |
Sì |
* Una tabella viene registrata come un'entità di riferimento solo quando fa riferimento al modulo Transact-SQL, a un tipo definito dall'utente o a una raccolta di XML Schema nella definizione di una colonna calcolata, un vincolo CHECK o un vincolo DEFAULT.
** Ogni colonna utilizzata nel predicato del filtro viene registrata come un'entità di riferimento.
*** Le stored procedure numerate con un valore intero maggiore di 1 non vengono rilevate come entità di riferimento o entità a cui si fa riferimento.
Autorizzazioni
Sono necessarie le autorizzazioni VIEW DEFINITION nel database e SELECT in sys.sql_expression_dependencies per il database. Per impostazione predefinita, l'autorizzazione SELECT è concessa solo ai membri del ruolo predefinito db_owner del database. Quando le autorizzazioni SELECT e VIEW DEFINITION sono concesse a un altro utente, il beneficiario può visualizzare tutte le dipendenze nel database.
Esempi
A.Restituzione di entità con riferimenti 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 AdventureWorks2012;
GO
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,
o.type_desc AS referencing_desciption,
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 referencing_id = OBJECT_ID(N'Production.vProductAndDescription');
GO
USE AdventureWorks2012;
GO
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,
o.type_desc AS referencing_desciption,
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 referencing_id = OBJECT_ID(N'Production.vProductAndDescription');
GO
B.Restituzione di 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 AdventureWorks2012;
GO
SELECT OBJECT_SCHEMA_NAME ( referencing_id ) AS referencing_schema_name,
OBJECT_NAME(referencing_id) AS referencing_entity_name,
o.type_desc AS referencing_desciption,
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
USE AdventureWorks2012;
GO
SELECT OBJECT_SCHEMA_NAME ( referencing_id ) AS referencing_schema_name,
OBJECT_NAME(referencing_id) AS referencing_entity_name,
o.type_desc AS referencing_desciption,
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.Restituzione di dipendenze tra 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. Notare che NULL viene restituito nella colonna referenced_schema_name per l'entità t3 a cui viene fatto riferimento, perché non è stato specificato un nome per l'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;
GO
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
Vedere anche
Riferimento
sys.dm_sql_referenced_entities (Transact-SQL)
sys.dm_sql_referencing_entities (Transact-SQL)
Cronologia modifiche
Contenuto aggiornato |
---|
Rimozione dalla sezione Osservazioni del passaggio indicante che le dipendenze della colonna non vengono registrate per le funzioni CLR con valori di tabella. |