Partilhar via


OBJECT_ID (Transact-SQL)

Retorna o número de identificação do banco de dados do objeto de escopo de esquema.

Observação importanteImportante

Os objetos que não são de escopo de esquema, como gatilhos DDL, não podem ser consultados com o uso de OBJECT_ID. Para objetos não encontrados na exibição do catálogo sys.objects, obtenha os números de identificação de objeto consultando a exibição do catálogo apropriada. Por exemplo, para retornar o número de identificação de objeto de um gatilho DDL, use SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog'.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

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

Argumentos

  • 'object_name'
    É o objeto a ser usado. object_name é varchar ou nvarchar. Se object_name for varchar, será convertido implicitamente em nvarchar. A especificação dos nomes de banco de dados e esquema é opcional.

  • 'object_type'
    É o tipo de objeto de escopo de esquema. object_type é varchar ou nvarchar. Se object_type for varchar, será convertido implicitamente em nvarchar. Para obter uma lista de tipos de objeto, consulte a coluna type em sys.objects (Transact-SQL).

Tipos de retorno

int

Exceções

Para um índice de espaço, OBJECT_ID retorna NULL.

Retorna NULL em caso de erro.

Um usuário só pode exibir os metadados de itens protegidos de sua propriedade ou para os quais ele recebeu permissão. Isso significa que as funções internas que emitem metadados, como OBJECT_ID, poderão retornar NULL se o usuário não tiver nenhuma permissão para o objeto. Para obter mais informações, consulte Configuração de visibilidade de metadados e Solucionando problemas de visibilidade de metadados.

Comentários

Quando o parâmetro para uma função de sistema for opcional, o banco de dados atual, o computador host, o usuário do servidor ou o usuário do banco de dados será assumido. As funções internas sempre devem ser seguidas por parênteses.

Quando uma tabela temporária for especificada, o nome do banco de dados deverá vir antes do nome da tabela temporária, a menos que o banco de dados seja tempdb. Por exemplo: SELECT OBJECT_ID('tempdb..#mytemptable').

As funções de sistema podem ser usadas na lista de seleção, na cláusula WHERE e em qualquer local onde uma expressão for permitida. Para obter mais informações, consulte Expressões (Transact-SQL) e WHERE (Transact-SQL).

Exemplos

A. Retornando a ID de um objeto especificado

O exemplo a seguir retorna a ID de objeto para a tabela Production.WorkOrder do banco de dados AdventureWorks2008R2.

USE master;
GO
SELECT OBJECT_ID(N'AdventureWorks2008R2.Production.WorkOrder') AS 'Object ID';
GO

B. Verificando se um objeto existe

O exemplo a seguir confirma a existência de uma tabela especificada ao verificar se ela tem uma ID de objeto. Se a tabela existir, ela será excluída. Se a tabela não existir, a instrução DROP TABLE não será executada.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID (N'dbo.AWBuildVersion', N'U') IS NOT NULL
DROP TABLE dbo.AWBuildVersion;
GO

C. Usando OBJECT_ID para especificar o valor de um parâmetro de função do sistema

O exemplo a seguir retorna informações de todos os índices e partições da tabela Person.Address do banco de dados AdventureWorks2008R2 usando a função sys.dm_db_index_operational_stats.

Observação importanteImportante

Quando você está usando as funções DB_ID e OBJECT_ID do Transact-SQL para retornar um valor de parâmetro, sempre confirme se é retornada uma ID válida. Se o banco de dados ou nome de objeto não puder ser encontrado, por não existir ou por estar escrito incorretamente, ambas as funções retornarão NULL. A função sys.dm_db_index_operational_stats interpreta NULL como um valor de curinga que especifica todos os bancos de dados ou todos os objetos. Como pode se tratar de uma operação não intencional, os exemplos nesta seção demonstram a maneira segura de determinar a identificação do banco de dados e do objeto.

DECLARE @db_id int;
DECLARE @object_id int;
SET @db_id = DB_ID(N'AdventureWorks2008R2');
SET @object_id = OBJECT_ID(N'AdventureWorks2008R2.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