No SQL Server você pode usar o
OBJECTPROPERTY()
função para verificar o tipo de um objeto. Mais especificamente, você pode verificar se é ou não um tipo específico. Por exemplo, o
IsTable
A propriedade informa se é ou não uma tabela, o IsView
propriedade informa se é ou não uma visão, etc. Este artigo oferece alguns exemplos básicos que verificam se um objeto é uma tabela, exibição, procedimento armazenado ou função com valor de tabela.
Exemplo 1 - Verificar Tabela
Aqui está um exemplo que verifica se um objeto é uma tabela.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsTable') AS [IsTable];
Resultado:
+-----------+ | IsTable | |-----------| | 1 | +-----------+
Aqui, o nome do objeto é
Artists
e o esquema é dbo
. Nesse caso, o resultado é
1
, que indica que o objeto é de fato uma tabela. Exemplo 2 – Verificar visualização
Aqui está um exemplo que verifica se um objeto é uma visualização.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsView') AS [IsView];
Resultado:
+----------+ | IsView | |----------| | 0 | +----------+
Nesse caso, estou verificando o mesmo objeto do exemplo anterior e, portanto, já sabemos que não é uma view. Portanto, o resultado é
0
, o que indica que não é uma visualização. Aqui está outro exemplo, desta vez o objeto é de fato uma visão:
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.RockAlbums'), 'IsView') AS [IsView];
Resultado:
+----------+ | IsView | |----------| | 1 | +----------+
Observe que eu removi o
USE Music;
parte, porque eu já estou nesse banco de dados. A OBJECTPROPERTY()
verifica apenas objetos com escopo de esquema no banco de dados atual. Exemplo 3 - Declaração Condicional
Podemos levar o conceito um passo adiante e incorporar os exemplos anteriores em um
IF
demonstração. Dessa forma, podemos executar uma única instrução para descobrir qual é o tipo do objeto. Abaixo estão exemplos básicos que simplesmente geram o tipo de objeto.
Tabela
DECLARE @TheObject varchar(255) = 'dbo.Artists'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Resultado:
Table
Nesse caso, o objeto é uma tabela.
Aqui estão mais exemplos que usam a mesma instrução, mas com diferentes tipos de objetos.
Visualizar
DECLARE @TheObject varchar(255) = 'dbo.RockAlbums'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Resultado:
View
Procedimento armazenado
DECLARE @TheObject varchar(255) = 'dbo.uspGetAlbumsByArtist'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Resultado:
Stored Procedure
Função com valor de tabela
DECLARE @TheObject varchar(255) = 'dbo.ufn_AlbumsByGenre1'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Resultado:
Table-valued Function
Você pode adicionar mais tipos à instrução para torná-la mais útil. Eu listei os argumentos que
OBJECTPROPERTY()
aceita nesta página. Nem todos esses são tipos de objetos – existem muitas propriedades diferentes que você pode verificar. Para obter uma explicação completa de cada propriedade, consulte a documentação da Microsoft.