OBJECT_NAME (Transact-SQL)

Si applica a:yes SQL Server (tutte le versioni supportate) database SQL di Azure Istanza gestita di SQL di Azure YesyesAzure Synapse Analytics Analytics yesPlatform System (PDW) Yes

Restituisce il nome dell'oggetto di database per gli oggetti definiti a livello di ambito di schema. Per un elenco di oggetti con ambito schema, vedere sys.objects (Transact-SQL).

Topic link iconConvenzioni di sintassi Transact-SQL

Sintassi

OBJECT_NAME ( object_id [, database_id ] )  

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

Argomenti

object_id
ID dell'oggetto da utilizzare. object_id è di tipo int e si presume che sia un oggetto con ambito schema nel database specificato o nel contesto del database corrente.

database_id
ID del database in cui è necessario cercare l'oggetto. database_id è int.

Tipi restituiti

sysname

Eccezioni

Restituisce NULL in caso di errore o se un chiamante non dispone dell'autorizzazione necessaria per visualizzare l'oggetto. Se l'opzione AUTO_CLOSE del database di destinazione è impostata su ON, la funzione aprirà il database.

Un utente può visualizzare esclusivamente i metadati delle entità a sicurezza diretta di cui è proprietario o per cui ha ricevuto un'autorizzazione. Di conseguenza, le funzioni predefinite di creazione dei metadati come OBJECT_NAME possono restituire NULL se l'utente non dispone di alcuna autorizzazione per l'oggetto. Per altre informazioni, vedere Metadata Visibility Configuration.

Autorizzazioni

È richiesta l'autorizzazione ANY per l'oggetto. Per specificare l'ID di un database, è inoltre necessaria l'autorizzazione CONNECT per il database o l'abilitazione dell'account guest.

Commenti

È possibile utilizzare funzioni di sistema nell'elenco di selezione, nella clausola WHERE e in tutti i casi in cui è consentita un'espressione. Per altre informazioni, vedere Espressioni e WHERE.

Il valore restituito da questa funzione di sistema utilizza le regole di confronto del database corrente.

Per impostazione predefinita, il SQL Server motore di database presuppone che object_id sia nel contesto del database corrente. Una query che fa riferimento a un valore di object_id in un altro database restituisce NULL oppure risultati errati. Ad esempio, nella query seguente il contesto del database corrente è AdventureWorks2012. Il motore di database tenta di restituire un nome oggetto per l'ID oggetto specificato in tale database anziché il database specificato nella clausola FROM della query. Verranno pertanto restituite informazioni errate.

USE AdventureWorks2012;  
GO  
SELECT DISTINCT OBJECT_NAME(object_id)  
FROM master.sys.objects;  
GO  

È possibile risolvere i nomi di oggetto nel contesto di un altro database specificando un ID database. Nell'esempio seguente viene specificato l'ID del database master nella funzione OBJECT_SCHEMA_NAME e vengono restituiti i risultati corretti.

USE AdventureWorks2012;  
GO  
SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id, 1) AS schema_name  
FROM master.sys.objects;  
GO  

Esempi

R. Utilizzo di OBJECT_NAME in una clausola WHERE

Nell'esempio seguente vengono restituite le colonne dalla vista del catalogo sys.objects per l'oggetto specificato da OBJECT_NAME nella clausola WHERE dell'istruzione SELECT.

USE AdventureWorks2012;  
GO  
DECLARE @MyID INT;  
SET @MyID = (SELECT OBJECT_ID('AdventureWorks2012.Production.Product',  
    'U'));  
SELECT name, object_id, type_desc  
FROM sys.objects  
WHERE name = OBJECT_NAME(@MyID);  
GO  

B. Restituzione del nome dello schema dell'oggetto e del nome dell'oggetto

Nell'esempio seguente vengono restituiti il nome dello schema dell'oggetto, il nome dell'oggetto e il testo SQL per tutti i piani di query memorizzati nella cache che non sono istruzioni ad hoc o preparate.

SELECT DB_NAME(st.dbid) AS database_name,   
    OBJECT_SCHEMA_NAME(st.objectid, st.dbid) AS schema_name,  
    OBJECT_NAME(st.objectid, st.dbid) AS object_name,   
    st.text AS query_text  
FROM sys.dm_exec_query_stats AS qs  
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st  
WHERE st.objectid IS NOT NULL;  
GO  

C. Restituzione dei nomi degli oggetti in tre parti

Nell'esempio seguente vengono restituiti il nome del database, dello schema e dell'oggetto, nonché tutte le altre colonne della vista a gestione dinamica sys.dm_db_index_operational_stats per tutti gli oggetti di tutti i database.

SELECT QUOTENAME(DB_NAME(database_id))   
    + N'.'   
    + QUOTENAME(OBJECT_SCHEMA_NAME(object_id, database_id))   
    + N'.'   
    + QUOTENAME(OBJECT_NAME(object_id, database_id))  
    , *   
FROM sys.dm_db_index_operational_stats(NULL, NULL, NULL, NULL);  
GO  

Esempi: Azure Synapse Analytics e Analytics Platform System (PDW)

D. Utilizzo di OBJECT_NAME in una clausola WHERE

Nell'esempio seguente vengono restituite le colonne dalla vista del catalogo sys.objects per l'oggetto specificato da OBJECT_NAME nella clausola WHERE dell'istruzione SELECT. Il numero dell'oggetto (274100017 nell'esempio seguente) sarà diverso. Per testare l'esempio, cercare un numero di oggetto valido eseguendo SELECT name, object_id FROM sys.objects; nel database.

SELECT name, object_id, type_desc  
FROM sys.objects  
WHERE name = OBJECT_NAME(274100017);  

Vedere anche

Funzioni per i metadati (Transact-SQL)
OBJECT_DEFINITION (Transact-SQL)
OBJECT_ID (Transact-SQL)