Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Verifique se um objeto é uma tabela, exibição ou procedimento armazenado no SQL Server usando a função OBJECTPROPERTY()


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.