OBJECT_SCHEMA_NAME (Transact-SQL)
Restituisce il nome dello schema di database per gli oggetti con ambito schema. Per un elenco degli oggetti con ambito schema, vedere sys.objects (Transact-SQL).
Sintassi
OBJECT_SCHEMA_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 l'oggetto deve essere cercato. database_id è di tipo 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_SCHEMA_NAME possono restituire NULL se l'utente non dispone di alcuna autorizzazione per l'oggetto. Per ulteriori informazioni, vedere Configurazione della visibilità dei metadati e Risoluzione dei problemi relativi alla visibilità dei metadati.
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 le funzioni di sistema nell'elenco di selezione, nella clausola WHERE e in tutti i casi in cui è consentita un'espressione. Per ulteriori informazioni, vedere Espressioni e WHERE.
Il set di risultati restituito da questa funzione di sistema utilizza le regole di confronto del database corrente.
Se non si specifica database_id, Motore di database di SQL Server 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 è AdventureWorks2008R2. Motore di database cerca di restituire un nome di schema 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.
USE AdventureWorks2008R2;
GO
SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id)
FROM master.sys.objects;
GO
Nell'esempio seguente viene specificato l'ID del database master nella funzione OBJECT_SCHEMA_NAME e vengono restituiti i risultati corretti.
USE AdventureWorks2008R2;
GO
SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id, 1) AS schema_name
FROM master.sys.objects;
GO
Esempi
A. 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_statement
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
B. 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
Vedere anche