sys.dm_sql_referencing_entities (Transact-SQL)

Restituisce una riga per ogni entità nel database corrente che fa riferimento a un'altra entità definita dall'utente in base al nome. 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, se un tipo definito dall'utente (UDT) è specificato come entità con riferimenti, questa funzione restituisce ogni entità definita dall'utente che nella propria definizione fa riferimento a quel tipo in base al nome. La funzione non restituisce entità negli altri database che possono fare riferimento all'entità specificata. Questa funzione deve essere eseguita nel contesto del database master perché restituisca un trigger DDL a livello di server come entità di riferimento.

È possibile utilizzare questa funzione a gestione dinamica per creare un report sui seguenti tipi di entità del database corrente che fanno riferimento all'entità specificata:

  • Entità associate o non associate a schema

  • Trigger DDL a livello di database

  • Trigger DDL a livello di server

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

sys.dm_sql_referencing_entities (
        ' schema_name.referenced_entity_name ' , ' <referenced_class> ' )

<referenced_class> ::=
{
  OBJECT
  | TYPE
  | XML_SCHEMA_COLLECTION
  | PARTITION_FUNCTION
}

Argomenti

  • schema_name.referenced_entity_name
    Nome dell'entità a cui si fa riferimento.

    schema_name è obbligatorio, eccetto quando la classe a cui si fa riferimento è PARTITION_FUNCTION.

    schema_name.referenced_entity_name è di tipo nvarchar(517).

  • <referenced_class> ::= { OBJECT  | TYPE  | XML_SCHEMA_COLLECTION | PARTITION_FUNCTION }
    Classe dell'entità a cui si fa riferimento. È possibile specificare solo una classe per istruzione.

    <referenced_class> è di tipo nvarchar(60).

Tabella restituita

Nome colonna

Tipo di dati

Descrizione

referencing_schema_name

sysname

Schema a cui appartiene l'entità di riferimento. Ammette valori Null.

NULL per trigger DDL a livello di database e a livello di server.

referencing_entity_name

sysname

Nome dell'entità di riferimento. Non ammette valori Null.

referencing_id

int

ID dell'entità di riferimento. Non ammette valori Null.

referencing_class

tinyint

Classe dell'entità di riferimento. Non ammette valori Null.

1 = Oggetto

12 = Trigger DDL a livello di database

13 = Trigger DDL a livello di server

referencing_class_desc

nvarchar(60)

Descrizione della classe dell'entità di riferimento.

OBJECT

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER

is_caller_dependent

bit

Indica che la risoluzione dell'ID dell'entità a cui si fa riferimento si verifica in fase di esecuzione poiché dipende dallo schema del chiamante.

1 = L'entità di riferimento ha la possibilità di fare riferimento all'entità, tuttavia la risoluzione dell'ID dell'entità a cui si fa riferimento è dipendente dal chiamante e non può essere determinata. Ciò avviene solo per riferimenti a stored procedure non associati a schema, stored procedure estese o funzioni definite dall'utente chiamate all'interno di un'istruzione EXECUTE.

0 = L'entità a cui si fa riferimento non è dipendente dal chiamante.

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à a cui si fa riferimento specificata è una stored procedure numerata.

Osservazioni

Nella tabella seguente sono elencati i tipi di entità per i quali vengono create e gestite le informazioni sulle dipendenze. Le informazioni sulla dipendenza 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ì*

Vista

Stored procedure Transact-SQL**

Stored procedure CLR

No

Funzione Transact-SQL definita dall'utente

Funzione CLR definita dall'utente

No

Trigger CLR (DML e DDL)

No

No

Trigger DML Transact-SQL

No

Trigger DDL Transact-SQL a livello di database

No

Trigger DDL Transact-SQL a livello di server

No

Stored procedure estese

No

Coda

No

Sinonimo

No

Tipo (alias e tipo di CLR definito dall'utente)

No

Raccolta di XML Schema

No

Funzione di partizione

No

* Una tabella è 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.

** Le stored procedure numerate con un valore integer maggiore di 1 non vengono registrate come entità di riferimento o entità con riferimenti.

Per ulteriori informazioni, vedere Informazioni sulle dipendenze SQL.

Autorizzazioni

Richiede l'autorizzazione CONTROL per l'entità a cui si fa riferimento e l'autorizzazione SELECT per sys.dm_sql_referencing_entities. Quando l'entità a cui si fa riferimento è una funzione di partizione, è necessaria l'autorizzazione CONTROL per il database. Per impostazione predefinita, l'autorizzazione SELECT è concessa a public.

Esempi

A. Restituzione delle entità che fanno riferimento a un'entità specificata

Nell'esempio seguente vengono restituite le entità nel database corrente che fanno riferimento alla tabella specificata.

USE AdventureWorks2008R2;
GO
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('Production.Product', 'OBJECT');
GO

B. Restituzione delle entità che fanno riferimento a un tipo specificato

Nell'esempio seguente vengono restituite le entità che fanno riferimento al tipo alias dbo.Flag. Il set di risultati mostra che questo tipo è utilizzato da due stored procedure. Il tipo dbo.Flag è utilizzato anche nella definizione di diverse colonne nella tabella HumanResources.Employee. Poiché, tuttavia, il tipo non è presente nella definizione di una colonna calcolata, un vincolo CHECK o un vincolo DEFAULT nella tabella, non viene restituita alcuna riga per la tabella HumanResources.Employee.

USE AdventureWorks2008R2;
GO
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('dbo.Flag', 'TYPE');
GO

Set di risultati:

referencing_schema_name referencing_entity_name   referencing_id referencing_class_desc is_caller_dependent

----------------------- -------------------------  ------------- ---------------------- -------------------

HumanResources          uspUpdateEmployeeHireInfo  1803153469    OBJECT_OR_COLUMN       0

HumanResources          uspUpdateEmployeeLogin     1819153526    OBJECT_OR_COLUMN       0

(2 righe interessate)