OBJECT_ID (Transact-SQL) Returns the database object identification number of a schema-scoped object. Important |
|---|
Objects that are not schema-scoped, such as DDL triggers, cannot be queried by using OBJECT_ID. For objects that are not found in the sys.objects catalog view, obtain the object identification numbers by querying the appropriate catalog view. For example, to return the object identification number of a DDL trigger, use SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog'. |
Transact-SQL Syntax Conventions

Syntax
OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ]
object_name' [ ,'object_type' ] )

Arguments
- 'object_name'
Is the object to be used. object_name is either varchar or nvarchar. If object_name is varchar, it is implicitly converted to nvarchar. Specifying the database and schema names is optional. - 'object_type'
Is the schema-scoped object type. object_type is either varchar or nvarchar. If object_type is varchar, it is implicitly converted to nvarchar. For a list of object types, see the type column in sys.objects (Transact-SQL).

Return Types

Exceptions
For a spatial index, OBJECT_ID returns NULL. Returns NULL on error. A user can only view the metadata of securables that the user owns or on which the user has been granted permission. This means that metadata-emitting, built-in functions such as OBJECT_ID may return NULL if the user does not have any permission on the object. For more information, see Metadata Visibility Configuration.

Remarks
When the parameter to a system function is optional, the current database, host computer, server user, or database user is assumed. Built-in functions must always be followed by parentheses. When a temporary table name is specified, the database name must come before the temporary table name, unless the current database is tempdb. For example: SELECT OBJECT_ID('tempdb..#mytemptable'). System functions can be used in the select list, in the WHERE clause, and anywhere an expression is allowed. For more information, see Expressions (Transact-SQL) and WHERE (Transact-SQL).

Examples
A.Returning the object ID for a specified objectThe following example returns the object ID for the Production.WorkOrder table in the AdventureWorks database.
USE master;
GO
SELECT OBJECT_ID(N'AdventureWorks2012.Production.WorkOrder') AS 'Object ID';
GO
B.Verifying that an object existsThe following example checks for the existence of a specified table by verifying that the table has an object ID. If the table exists, it is deleted. If the table does not exist, the DROP TABLE statement is not executed.
USE AdventureWorks2012;
GO
IF OBJECT_ID (N'dbo.AWBuildVersion', N'U') IS NOT NULL
DROP TABLE dbo.AWBuildVersion;
GO
C.Using OBJECT_ID to specify the value of a system function parameterThe following example returns information for all indexes and partitions of the Person.Address table in the AdventureWorks database by using the sys.dm_db_index_operational_stats function. Important |
|---|
When you are using the Transact-SQL functions DB_ID and OBJECT_ID to return a parameter value, always make sure that a valid ID is returned. If the database or object name cannot be found, such as when they do not exist or are spelled incorrectly, both functions will return NULL. The sys.dm_db_index_operational_stats function interprets NULL as a wildcard value that specifies all databases or all objects. Because this can be an unintentional operation, the examples in this section demonstrate the safe way to determine database and object IDs. |
DECLARE @db_id int;
DECLARE @object_id int;
SET @db_id = DB_ID(N'AdventureWorks2012');
SET @object_id = OBJECT_ID(N'AdventureWorks2012.Person.Address');
IF @db_id IS NULL
BEGIN;
PRINT N'Invalid database';
END;
ELSE IF @object_id IS NULL
BEGIN;
PRINT N'Invalid object';
END;
ELSE
BEGIN;
SELECT * FROM sys.dm_db_index_operational_stats(@db_id, @object_id, NULL, NULL);
END;
GO

See Also
|
OBJECT_ID (Transact-SQL) Devuelve el número de Id. del objeto de base de datos de un objeto de ámbito de esquema. Importante |
|---|
Los objetos que no están en el ámbito del esquema, por ejemplo los desencadenadores DDL, no se pueden consultar utilizando OBJECT_ID. En el caso de objetos que no están en la vista de catálogo sys.objects, debe obtener los números de identificación de objeto mediante consultas a la vista de catálogo correspondiente. Por ejemplo, para devolver el número de identificación de objeto de un desencadenador DDL, utilice SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog'. |
Convenciones de sintaxis de Transact-SQL

Sintaxis
OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ]
object_name' [ ,'object_type' ] )

Argumentos
- 'object_name'
Es el objeto que va a utilizarse. object_name es de tipo varchar o nvarchar. Si object_name es de tipo varchar, se convierte implícitamente en nvarchar. Especificar los nombres de la base de datos y del esquema es opcional. - 'object_type'
Es el tipo de objeto de ámbito del esquema. object_type es de tipo varchar o nvarchar. Si object_type es de tipo varchar, se convierte implícitamente en nvarchar. Si desea una lista de los tipos de objeto, vea la columna type en sys.objects (Transact-SQL).

Tipos de valor devueltos

Excepciones
Para un índice espacial, OBJECT_ID devuelve NULL. Devuelve NULL si se produce un error. 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_ID, pueden devolver NULL si el usuario no tiene ningún permiso para el objeto. Para obtener más información, vea Configuración de visibilidad de los metadatos.

Comentarios
Cuando el parámetro de una función del sistema es opcional, se asumen la base de datos, el equipo host, el usuario del servidor o el usuario de la base de datos actuales. Las funciones integradas siempre deben ir seguidas de paréntesis. Cuando se especifica un nombre de tabla temporal, el nombre de base de datos debe ir antes del nombre de tabla temporal, a menos que la base de datos temporal sea tempdb. Por ejemplo: SELECT OBJECT_ID('tempdb..#mytemptable'). Las funciones del sistema se pueden utilizar 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 Expresiones (Transact-SQL) y WHERE (Transact-SQL).

Ejemplos
A.Devolver el identificador de objeto de un objeto especificadoEn este ejemplo se devuelve el Id. de objeto para la tabla Production.WorkOrder en la base de datos AdventureWorks.
USE master;
GO
SELECT OBJECT_ID(N'AdventureWorks2012.Production.WorkOrder') AS 'Object ID';
GO
B.Comprobar la existencia de un objetoEn el ejemplo siguiente se comprueba la existencia de una tabla especificada comprobando si la tabla tiene un identificador de objeto. Si la tabla existe, se elimina. Si la tabla no existe, la instrucción DROP TABLE no se ejecuta.
USE AdventureWorks2012;
GO
IF OBJECT_ID (N'dbo.AWBuildVersion', N'U') IS NOT NULL
DROP TABLE dbo.AWBuildVersion;
GO
C.Usar OBJECT_ID para especificar el valor de un parámetro de función del sistemaEn el siguiente ejemplo se devuelve información de todos los índices y particiones de la tabla Person.Address en la base de datos AdventureWorks con la función sys.dm_db_index_operational_stats. Importante |
|---|
Cuando utilice las funciones DB_ID y OBJECT_ID de Transact-SQL para devolver un valor de parámetro, asegúrese de que siempre se devuelva un Id. válido. Si el nombre de objeto o base de datos no se puede encontrar, por ejemplo, cuando no existe o se ha escrito incorrectamente, las dos funciones devolverán NULL. La función sys.dm_db_index_operational_stats interpreta NULL como un valor de carácter comodín que especifica todas las bases de datos o todos los objetos. Puesto que ésta puede ser una operación accidental, los ejemplos de esta sección demuestran una forma segura para determinar los Id. de bases de datos y objetos. |
DECLARE @db_id int;
DECLARE @object_id int;
SET @db_id = DB_ID(N'AdventureWorks2012');
SET @object_id = OBJECT_ID(N'AdventureWorks2012.Person.Address');
IF @db_id IS NULL
BEGIN;
PRINT N'Invalid database';
END;
ELSE IF @object_id IS NULL
BEGIN;
PRINT N'Invalid object';
END;
ELSE
BEGIN;
SELECT * FROM sys.dm_db_index_operational_stats(@db_id, @object_id, NULL, NULL);
END;
GO

Vea también
|