OBJECT_SCHEMA_NAME (Transact-SQL)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics
Devuelve el nombre del esquema de la base de datos para los objetos de ámbito de esquema. Para obtener una lista de los objetos de ámbito de esquema, consulte sys.objects (Transact-SQL).
Nota:
La función OBJECT_SCHEMA_NAME
solo se admite en grupos de SQL dedicados en Azure Synapse Analytics.
Convenciones de sintaxis de Transact-SQL
Sintaxis
OBJECT_SCHEMA_NAME ( object_id [, database_id ] )
Argumentos
object_id
Identificador del objeto que se va a utilizar. object_id es de tipo int y se considera que se trata de un objeto de ámbito de esquema en la base de datos especificada o en el contexto de la base de datos actual.
database_id
Identificador de la base de datos donde se va a buscar el objeto. database_id es int.
Tipos de valor devuelto
sysname
Excepciones
Devuelve NULL si se produce un error o si el autor de la llamada no tiene permiso para ver el objeto. Si la base de datos de destino tiene la opción AUTO_CLOSE establecida en ON, la función abre la base de datos.
Un usuario solo puede ver los metadatos de elementos protegibles que posea o para los que se le haya concedido permiso. Las funciones integradas de emisión de metadatos, como OBJECT_SCHEMA_NAME
, pueden devolver NULL si el usuario no tiene ningún permiso para el objeto. Para obtener más información, consulte Metadata Visibility Configuration.
Permisos
Requiere el permiso ANY en el objeto. Para especificar un identificador de base de datos, también se requiere el permiso CONNECT en la base de datos o se debe habilitar la cuenta de invitado.
Comentarios
Las funciones del sistema se pueden usar en la lista de selección, en la cláusula WHERE y en cualquier lugar donde se permita una expresión. Para obtener más información, vea Expressions y WHERE.
El conjunto de resultados que devuelve esta función del sistema usa la intercalación de la base de datos actual.
Si no se especifica database_id, Motor de base de datos de SQL Server considera que object_id
está en el contexto de la base de datos actual. Una consulta que hace referencia a un object_id
de otra base de datos devuelve NULL o resultados incorrectos. Por ejemplo, en la consulta siguiente, el contexto de la base de datos actual es AdventureWorks2022. El motor de base de datos intenta devolver un nombre de esquema de objetos para el object_id
especificado en la base de datos actual en lugar de en la base de datos especificada en la cláusula FROM de la consulta. Por lo tanto, se devuelve información incorrecta.
SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id)
FROM master.sys.objects;
En el ejemplo siguiente, se especifica el identificador de la base de datos master
en la función OBJECT_SCHEMA_NAME
y devuelve los resultados correctos.
SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id, 1) AS schema_name
FROM master.sys.objects;
Ejemplos
A. Devolver el nombre del esquema de objetos y el nombre del objeto
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance
En el ejemplo siguiente se devuelve el nombre del esquema de objetos, el nombre del objeto y el texto SQL para todos los planes de consulta en caché que no sean instrucciones preparadas o ad hoc.
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. Devolver nombres de objetos de tres partes
En el ejemplo siguiente se devuelve la base de datos, el esquema y el nombre de objeto de todos los objetos del contexto de base de datos actual.
SELECT QUOTENAME(DB_NAME(db_id()))
+ N'.'
+ QUOTENAME(OBJECT_SCHEMA_NAME(object_id, db_id()))
+ N'.'
+ QUOTENAME(OBJECT_NAME(object_id, db_id()))
, *
FROM sys.objects;
GO
En el ejemplo siguiente se devuelve el nombre del objeto, esquema o base de datos junto con todas las demás columnas de la vista de administración dinámica sys.dm_db_index_operational_stats
de todos los objetos de todas las bases de datos.
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance
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