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.