OBJECT_NAME (Transact-SQL)

Aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsEndpoint de analítica SQL en Microsoft FabricAlmacén en Microsoft FabricBase de datos SQL en Microsoft Fabric

Devuelve el nombre del objeto de la base de datos para los objetos de ámbito de esquema. Para obtener una lista de los objetos de ámbito de esquema, vea sys.objects (Transact-SQL).

Convenciones de sintaxis de Transact-SQL

Sintaxis

OBJECT_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.

ID de base de datos

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 abrirá 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. Esto significa que las funciones integradas de emisión de metadatos, como OBJECT_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 valor que devuelve esta función del sistema usa la intercalación de la base de datos actual.

De forma predeterminada, Motor de base de datos de SQL Server considera que object_id está en el contexto de la base de datos actual. En SQL Server o Azure SQL Managed Instance, una consulta que hace referencia a un object_id en otra base de datos devuelve NULL resultados incorrectos. Por ejemplo, en la siguiente consulta el contexto de la base de datos actual es AdventureWorks2025. Motor de base de datos intenta devolver un nombre de objeto para el identificador de objeto especificado en esa base de datos 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.

Note

En Azure SQL Database y SQL Database en Microsoft Fabric, las consultas entre bases de datos no están disponibles.

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

Puede resolver los nombres de objeto en el contexto de otra base de datos especificando un identificador de base de datos. El siguiente ejemplo especifica el ID de base de datos de otra base de datos de usuario, AdventureWorksDW2022, con la OBJECT_SCHEMA_NAME función, y devuelve los resultados correctos.

USE AdventureWorks2022;  
GO  
SELECT DISTINCT OBJECT_SCHEMA_NAME(object_id, DB_ID(N'AdventureWorksDW2022')) AS schema_name
FROM AdventureWorksDW2022.sys.objects;  
GO  

Ejemplos

A. Usar OBJECT_NAME en una cláusula WHERE

El siguiente ejemplo devuelve columnas de la vista de catálogo sys.objects para el objeto especificado por OBJECT_NAME en la cláusula WHERE de la instrucción SELECT.

Note

En Azure SQL Database y SQL Database en Microsoft Fabric, la USE declaración no está disponible. En su lugar, conéctate directamente a la base de datos prevista y ejecuta el resto de la muestra de código.

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. Devolver el nombre del esquema de objetos y el nombre del objeto

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_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. Devolver nombres de objetos de tres partes

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.

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  

Ejemplos: Azure Synapse Analytics

D. Usar OBJECT_NAME en una cláusula WHERE

El siguiente ejemplo devuelve columnas de la vista de catálogo sys.objects para el objeto especificado por OBJECT_NAME en la cláusula WHERE de la instrucción SELECT. (El número de objeto [274100017 en el ejemplo siguiente] será diferente. Para probar este ejemplo, busque un número de objeto válido mediante la ejecución de SELECT name, object_id FROM sys.objects; en la base de datos).

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