Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Verifica se un oggetto è una tabella, una vista o una stored procedure in SQL Server utilizzando la funzione OBJECTPROPERTY()

In SQL Server puoi utilizzare OBJECTPROPERTY() funzione per controllare il tipo di un oggetto. Più in particolare, puoi verificare se si tratta o meno di un tipo specifico.

Ad esempio, il IsTable la proprietà ti dice se si tratta o meno di una tabella, la IsView la proprietà ti dice se si tratta o meno di una vista, ecc.

Questo articolo offre alcuni esempi di base che controllano se un oggetto è una tabella, una vista, una stored procedure o una funzione con valori di tabella.

Esempio 1:verifica della tabella

Ecco un esempio che verifica se un oggetto è una tabella.

USE Music; 
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsTable') AS [IsTable];

Risultato:

+-----------+
| IsTable   |
|-----------|
| 1         |
+-----------+

Qui, il nome dell'oggetto è Artists e lo schema è dbo .

In questo caso, il risultato è 1 , che indica che l'oggetto è in realtà una tabella.

Esempio 2:verifica della visualizzazione

Ecco un esempio che controlla se un oggetto è una vista.

USE Music; 
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsView') AS [IsView];

Risultato:

+----------+
| IsView   |
|----------|
| 0        |
+----------+

In questo caso, sto controllando lo stesso oggetto dell'esempio precedente, quindi sappiamo già che non è una vista. Pertanto, il risultato è 0 , che indica che non è una vista.

Ecco un altro esempio, questa volta l'oggetto è in realtà una vista:

SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.RockAlbums'), 'IsView') AS [IsView];

Risultato:

+----------+
| IsView   |
|----------|
| 1        |
+----------+

Nota che ho rimosso USE Music; parte, perché sono già in quel database. Il OBJECTPROPERTY() controlla solo gli oggetti con ambito schema nel database corrente.

Esempio 3 – Dichiarazione condizionale

Possiamo portare il concetto un ulteriore passo avanti e incorporare gli esempi precedenti in un IF dichiarazione. In questo modo possiamo eseguire una singola istruzione per scoprire di che tipo è l'oggetto.

Di seguito sono riportati esempi di base che generano semplicemente il tipo di oggetto.

Tabella

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.';

Risultato:

Table

In questo caso, l'oggetto è una tabella.

Ecco altri esempi che utilizzano la stessa istruzione, ma con tipi di oggetti diversi.

Visualizza

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.';

Risultato:

View

Procedura archiviata

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.';

Risultato:

Stored Procedure

Funzione con valori di tabella

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.';

Risultato:

Table-valued Function

Puoi aggiungere più tipi all'istruzione per renderla più utile. Ho elencato gli argomenti che OBJECTPROPERTY() accetta su questa pagina. Tuttavia, non tutti questi sono tipi di oggetti:ci sono molte proprietà diverse che puoi verificare.

Per una spiegazione completa di ciascuna proprietà, vedere la documentazione Microsoft.