OBJECT_ID (Transact-SQL)
Retorna o número de identificação do banco de dados do objeto de escopo de esquema.
Importante |
---|
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'. |
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. For example: 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 seguinte retorna a ID de objeto para a tabela Production.WorkOrder do banco de dados AdventureWorks.
USE master;
GO
SELECT OBJECT_ID(N'AdventureWorks.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 AdventureWorks;
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 AdventureWorks usando a função sys.dm_db_index_operational_stats.
Importante |
---|
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'AdventureWorks');
SET @object_id = OBJECT_ID(N'AdventureWorks.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