sys.sql_expression_dependencies (Transact-SQL)sys.sql_expression_dependencies (Transact-SQL)

SI APPLICA A: sìSQL Server noDatabase SQL di Azure sìAzure Synapse Analytics (SQL DW) sìParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Contiene una riga per ogni dipendenza in base al nome in un'entità definita dall'utente nel database corrente.Contains one row for each by-name dependency on a user-defined entity in the current database. Sono incluse le dipendenze tra funzioni scalari definite dall'utente e compilate SQL ServerSQL Server in modo nativo e altri moduli.This includes dependences between natively compiled, scalar user-defined functions and other SQL ServerSQL Server modules. Una dipendenza tra due entità viene creata quando un'entità, denominata entità a cui si fa riferimento, viene visualizzata in base al nome in un'espressione SQL permanente di un'altra entità, detta entità di riferimento.A dependency between two entities is created when one entity, called the referenced entity, appears by name in a persisted SQL expression of another entity, called the referencing entity. 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.For example, when a table is referenced in the definition of a view, the view, as the referencing entity, depends on the table, the referenced entity. Se la tabella viene eliminata, la vista non è utilizzabile.If the table is dropped, the view is unusable.

Per altre informazioni, vedere Funzioni scalari definite dall'utente per OLTP in memoria.For more information, see Scalar User-Defined Functions for In-Memory OLTP.

È possibile utilizzare questa vista del catalogo per creare report relativi alle informazioni sulle dipendenze per le entità seguenti:You can use this catalog view to report dependency information for the following entities:

  • Entità associate a schema.Schema-bound entities.

  • Entità non associate a schema.Non-schema-bound entities.

  • Entità tra database e tra server.Cross-database and cross-server entities. I nomi delle entità sono indicati; tuttavia, gli ID dell'entità non sono risolti.Entity names are reported; however, entity IDs are not resolved.

  • Dipendenze a livello di colonna relative alle entità associate a schema.Column-level dependencies on schema-bound entities. Le dipendenze a livello di colonna per gli oggetti non associati a schema possono essere restituite utilizzando sys. dm _sql_referenced_entities.Column-level dependencies for non-schema-bound objects can be returned by using sys.dm_sql_referenced_entities.

  • Trigger DDL a livello di server se nel contesto del database master.Server-level DDL triggers when in the context of the master database.

Nome colonnaColumn name Tipo di datiData type DescrizioneDescription
referencing_idreferencing_id intint ID dell'entità di riferimento.ID of the referencing entity. Non ammette i valori Null.Is not nullable.
referencing_minor_idreferencing_minor_id intint ID di colonna quando l'entità di riferimento è una colonna, in caso contrario, 0.Column ID when the referencing entity is a column; otherwise 0. Non ammette i valori Null.Is not nullable.
referencing_classreferencing_class tinyinttinyint Classe dell'entità di riferimento.Class of the referencing entity.

1 = Oggetto o colonna1 = Object or column

12 = Trigger DDL database12 = Database DDL trigger

13 = Trigger DDL server13 = Server DDL trigger

Non ammette i valori Null.Is not nullable.
referencing_class_descreferencing_class_desc nvarchar(60)nvarchar(60) Descrizione della classe dell'entità di riferimento.Description of the class of referencing entity.

OBJECT_OR_COLUMNOBJECT_OR_COLUMN

DATABASE_DDL_TRIGGERDATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGERSERVER_DDL_TRIGGER

Non ammette i valori Null.Is not nullable.
is_schema_bound_referenceis_schema_bound_reference bitbit 1 = L'entità a cui si fa riferimento è associata a schema.1 = Referenced entity is schema-bound.

0 = L'entità a cui si fa riferimento non è associata a schema.0 = Referenced entity is non-schema-bound.

Non ammette i valori Null.Is not nullable.
referenced_classreferenced_class tinyinttinyint Classe dell'entità con riferimenti.Class of the referenced entity.

1 = Oggetto o colonna1 = Object or column

6 = Tipo6 = Type

10 = Raccolta di XML Schema10 = XML schema collection

21 = Funzione di partizione21 = Partition function

Non ammette i valori Null.Is not nullable.
referenced_class_descreferenced_class_desc nvarchar(60)nvarchar(60) Descrizione della classe dell'entità a cui viene fatto riferimento.Description of class of referenced entity.

OBJECT_OR_COLUMNOBJECT_OR_COLUMN

TYPETYPE

XML_SCHEMA_COLLECTIONXML_SCHEMA_COLLECTION

PARTITION_FUNCTIONPARTITION_FUNCTION

Non ammette i valori Null.Is not nullable.
referenced_server_namereferenced_server_name sysnamesysname Nome del server dell'entità a cui viene fatto riferimento.Name of the server of the referenced entity.

Questa colonna viene popolata per le dipendenze tra server eseguite specificando un nome valido composto da quattro parti.This column is populated for cross-server dependencies that are made by specifying a valid four-part name. Per informazioni sui nomi multipart, vedere convenzioni (della sintassi Transact-SQL Transact)-SQL.For information about multipart names, see Transact-SQL Syntax Conventions (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.NULL for non-schema-bound entities for which the entity was referenced without specifying a four-part name.

NULL per le entità associate a schema perché devono trovarsi nello stesso database e pertanto possono essere definite solo utilizzando un nome in due parti (schema. Object).NULL for schema-bound entities because they must be in the same database and therefore can only be defined using a two-part (schema.object) name.
referenced_database_namereferenced_database_name sysnamesysname Nome del database dell'entità a cui viene fatto riferimento.Name of the database of the referenced entity.

Questa colonna viene popolata per i riferimenti tra database o tra server eseguiti specificando un nome valido composto da tre o quattro parti.This column is populated for cross-database or cross-server references that are made by specifying a valid three-part or four-part name.

Valore NULL per i riferimenti non associati a schemi che vengono specificati utilizzando un nome composto da una o due parti.NULL for non-schema-bound references when specified using a one-part or two-part name.

NULL per le entità associate a schema perché devono trovarsi nello stesso database e pertanto possono essere definite solo utilizzando un nome in due parti (schema. Object).NULL for schema-bound entities because they must be in the same database and therefore can only be defined using a two-part (schema.object) name.
referenced_schema_namereferenced_schema_name sysnamesysname Schema a cui appartiene l'entità a cui viene fatto riferimento.Schema in which the referenced entity belongs.

Valore NULL per i riferimenti non associati a schemi in cui è stato fatto riferimento all'entità senza specificare il nome dello schema.NULL for non-schema-bound references in which the entity was referenced without specifying the schema name.

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.Never NULL for schema-bound references because schema-bound entities must be defined and referenced by using a two-part name.
referenced_entity_namereferenced_entity_name sysnamesysname Nome dell'entità a cui viene fatto riferimento.Name of the referenced entity. Non ammette i valori Null.Is not nullable.
referenced_idreferenced_id intint ID dell'entità a cui viene fatto riferimento.ID of the referenced entity. Il valore di questa colonna non è mai NULL per i riferimenti associati a schema.The value of this column is never NULL for schema-bound references. Il valore di questa colonna è sempre NULL per i riferimenti tra server e tra database.The value of this column is always NULL for cross-server and cross-database references.

Valore NULL per i riferimenti all'interno del database se non è possibile determinare l'ID.NULL for references within the database if the ID cannot be determined. Per i riferimenti non associati a schemi, non è possibile risolvere l'ID nei casi seguenti:For non-schema-bound references, the ID cannot be resolved in the following cases:

L'entità con riferimenti non esiste nel database.The referenced entity does not exist in the database.

Lo schema dell'entità a cui si fa riferimento dipende dallo schema del chiamante e viene risolto in fase di esecuzione.The schema of the referenced entity depends on the schema of the caller and is resolved at run time. In questo caso, is_caller_dependent viene impostato su 1.In this case, is_caller_dependent is set to 1.
referenced_minor_idreferenced_minor_id intint ID della colonna con riferimenti quando l'entità di riferimento è una colonna; in caso contrario il valore è 0.ID of the referenced column when the referencing entity is a column; otherwise 0. Non ammette i valori Null.Is not nullable.

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 *.A referenced entity is a column when a column is identified by name in the referencing entity, or when the parent entity is used in a SELECT * statement.
is_caller_dependentis_caller_dependent bitbit 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.Indicates that schema binding for the referenced entity occurs at runtime; therefore, resolution of the entity ID depends on the schema of the caller. 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.This occurs when the referenced entity is a stored procedure, extended stored procedure, or a non-schema-bound user-defined function called in an EXECUTE statement.

1 = L'entità con riferimenti è dipendente dal chiamante e viene risolta in fase di esecuzione.1 = The referenced entity is caller dependent and is resolved at runtime. In questo caso, il valore di referenced_id è NULL.In this case, referenced_id is NULL.

0 = L'ID dell'entità a cui viene fatto riferimento non è dipendente dal chiamante.0 = The referenced entity ID is not caller dependent.

Il valore è sempre 0 per i riferimenti associati a schemi e tra database e tra server che indicano in modo esplicito un nome schema.Always 0 for schema-bound references and for cross-database and cross-server references that explicitly specify a schema name. Ad esempio, un riferimento a un'entità nel formato EXEC MyDatabase.MySchema.MyProc non è dipendente dal chiamante.For example, a reference to an entity in the format EXEC MyDatabase.MySchema.MyProc is not caller dependent. Tuttavia, un riferimento nel formato EXEC MyDatabase..MyProc è dipendente dal chiamante.However, a reference in the format EXEC MyDatabase..MyProc is caller dependent.
is_ambiguousis_ambiguous bitbit 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.Indicates the reference is ambiguous and can resolve at run time to a user-defined function, a user-defined type (UDT), or an xquery reference to a column of type xml.

Ad esempio, si supponga che l'istruzione SELECT Sales.GetOrder() FROM Sales.MySales sia stata definita in una stored procedure.For example, assume that the statement SELECT Sales.GetOrder() FROM Sales.MySales is defined in a 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().Until the stored procedure is executed, it is not known whether Sales.GetOrder() is a user-defined function in the Sales schema or column named Sales of type UDT with a method named GetOrder().

1 = Il riferimento è ambiguo.1 = Reference is ambiguous.

0 = Il riferimento non è ambiguo o l'entità può essere associata correttamente quando la vista viene chiamata.0 = Reference is unambiguous or the entity can be successfully bound when the view is called.

Il valore è sempre 0 per i riferimenti associati a schema.Always 0 for schema bound references.

NoteRemarks

Nella tabella seguente sono elencati i tipi di entità per i quali vengono create e gestite le informazioni sulle dipendenze.The following table lists the types of entities for which dependency information is created and maintained. Le informazioni sulle dipendenze non vengono create né gestite per regole, impostazioni predefinite, tabelle temporanee, stored procedure temporanee o oggetti di sistema.Dependency information is not created or maintained for rules, defaults, temporary tables, temporary stored procedures, or system objects.

Nota

Azure SQL Data Warehouse e Parallel data warehouse supportano le tabelle, le viste, le statistiche filtrate e i tipi di entità delle stored procedure Transact-SQL da questo elenco.Azure SQL Data Warehouse and Parallel Data Warehouse support tables, views, filtered statistics, and Transact-SQL stored procedures entity types from this list. Le informazioni sulle dipendenze vengono create e gestite solo per tabelle, viste e statistiche filtrate.Dependency information is created and maintained for tables, views, and filtered statistics only.

Tipo di entitàEntity type Entità di riferimentoReferencing entity Entità con riferimentiReferenced entity
TabellaTable Sì*Yes* YesYes
visualizzazioneView YesYes YesYes
Indice filtratoFiltered index Sì**Yes** NoNo
Statistiche filtrateFiltered statistics Sì**Yes** NoNo
Stored procedure*** Transact-SQLTransact-SQLTransact-SQLTransact-SQL stored procedure*** YesYes YesYes
stored procedure CLRCLR stored procedure NoNo YesYes
Funzione Transact-SQLTransact-SQL definita dall'utenteTransact-SQLTransact-SQL user-defined function YesYes YesYes
Funzione CLR definita dall'utenteCLR user-defined function NoNo YesYes
Trigger CLR (DML e DDL)CLR trigger (DML and DDL) NoNo NoNo
Trigger DML Transact-SQLTransact-SQLTransact-SQLTransact-SQL DML trigger YesYes NoNo
Trigger DDL Transact-SQLTransact-SQL a livello di databaseTransact-SQLTransact-SQL database-level DDL trigger YesYes NoNo
Trigger DDL Transact-SQLTransact-SQL a livello di serverTransact-SQLTransact-SQL server-level DDL trigger YesYes NoNo
Stored procedure esteseExtended stored procedures NoNo YesYes
CodaQueue NoNo YesYes
SinonimoSynonym NoNo YesYes
Tipo (alias e tipo di CLR definito dall'utente)Type (alias and CLR user-defined type) NoNo YesYes
Raccolta di XML SchemaXML schema collection NoNo YesYes
partition (funzione)Partition function NoNo YesYes

*Una tabella viene rilevata come entità di riferimento solo quando fa riferimento Transact-SQLTransact-SQL a un modulo, 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.* A table is tracked as a referencing entity only when it references a Transact-SQLTransact-SQL module, user-defined type, or XML schema collection in the definition of a computed column, CHECK constraint, or DEFAULT constraint.

** Ogni colonna utilizzata nel predicato del filtro viene registrata come un'entità di riferimento.** Each column used in the filter predicate is tracked as a referencing entity.

*** 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.*** Numbered stored procedures with an integer value greater than 1 are not tracked as either a referencing or referenced entity.

PermissionsPermissions

Sono richieste l'autorizzazione VIEW DEFINITION sul database e l'autorizzazione SELECT su sys.sql_expression_dependencies per il database.Requires VIEW DEFINITION permission on the database and SELECT permission on sys.sql_expression_dependencies for the database. L'autorizzazione SELECT è concessa per impostazione predefinita solo ai membri del ruolo predefinito del database di db_owner.By default, SELECT permission is granted only to members of the db_owner fixed database role. Quando le autorizzazioni SELECT e VIEW DEFINITION vengono concesse a un altro utente, l'utente autorizzato può visualizzare tutte le dipendenze nel database.When SELECT and VIEW DEFINITION permissions are granted to another user, the grantee can view all dependencies in the database.

EsempiExamples

R.A. Restituzione di entità con riferimenti da un'altra entitàReturning entities that are referenced by another entity

Nell'esempio seguente sono restituite le tabelle e colonne con riferimenti nella vista Production.vProductAndDescription.The following example returns the tables and columns referenced in the view Production.vProductAndDescription. La vista dipende dalle entità (tabelle e colonne) restituite nelle colonne referenced_entity_name e referenced_column_name.The view depends on the entities (tables and columns) returned in the referenced_entity_name and referenced_column_name columns.

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_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.B. Restituzione di entità che fanno riferimento a un'altra entitàReturning entities that reference another entity

Nell'esempio seguente vengono restituite le entità che fanno riferimento alla tabella Production.Product.The following example returns the entities that reference the table Production.Product. Le entità restituite nella colonna referencing_entity_name dipendono dalla tabella Product.The entities returned in the referencing_entity_name column depend on the Product table.

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.C. Restituzione di dipendenze tra databaseReturning cross-database dependencies

Nell'esempio seguente vengono restituite tutte le dipendenze tra database.The following example returns all cross-database dependencies. L'esempio prima crea il database db1 e due stored procedure che fanno riferimento alle tabelle nei database db2 e db3.The example first creates the database db1 and two stored procedures that reference tables in the databases db2 and db3. Sulla tabella sys.sql_expression_dependencies viene quindi eseguita una query per riportare le dipendenze tra database tra le procedure e le tabelle.The sys.sql_expression_dependencies table is then queried to report the cross-database dependencies between the procedures and the tables. Notare che NULL è restituito nella colonna referenced_schema_name per l'entità t3 a cui si fa riferimento perché per l'entità non è stato specificato un nome nella definizione della procedura.Notice that NULL is returned in the referenced_schema_name column for the referenced entity t3 because a schema name was not specified for that entity in the definition of the 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;  
GO  
  

Vedere ancheSee Also

sys.dm_sql_referenced_entities (Transact-SQL) sys.dm_sql_referenced_entities (Transact-SQL)
sys.dm_sql_referencing_entities (Transact-SQL)sys.dm_sql_referencing_entities (Transact-SQL)