OBJECT_NAME (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsEndpoint di analisi SQL in Microsoft FabricMagazzino in Microsoft FabricDatabase SQL in Microsoft Fabric

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

Convenzioni relative alla sintassi Transact-SQL

Sintassi

OBJECT_NAME ( object_id [, database_id ] )  

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 deve essere cercato 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.

Osservazioni:

È 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 motore di database di SQL Server presuppone che object_id sia nel contesto del database corrente. In SQL Server o Istanza gestita di SQL di Azure, una query che fa riferimento a un object_id in un altro database restituisce NULL risultati errati o risultati. Ad esempio, nella seguente query il contesto del database attuale è AdventureWorks2025. Il motore di database cerca di restituire un nome di oggetto per l'ID di oggetto specificato in tale database anziché il database specificato nella clausola FROM della query. Verranno pertanto restituite informazioni errate.

Note

In database SQL di Azure e SQL database in Microsoft Fabric, le query cross-database non sono disponibili.

USE AdventureWorks2022;  
GO  
SELECT DISTINCT OBJECT_NAME(object_id)  
FROM AdventureWorksDW.sys.objects;  
GO  

È possibile risolvere i nomi di oggetto nel contesto di un altro database specificando un ID database. Il seguente esempio specifica l'ID del database per un altro database utente, AdventureWorksDW2022, con la OBJECT_SCHEMA_NAME funzione, e restituisce i risultati corretti.

USE AdventureWorks2022;  
GO  
SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id, DB_ID(N'AdventureWorksDW2022')) AS schema_name
FROM AdventureWorksDW2022.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.

Note

In database SQL di Azure e SQL database in Microsoft Fabric, l'USEaffermazione non è disponibile. Invece, collegati direttamente al database previsto ed esegui il resto del campione di codice.

USE AdventureWorks2022;  
GO  
DECLARE @MyID INT;  
SET @MyID = (SELECT OBJECT_ID('AdventureWorks2022.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

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);