In SQL Server kunt u de OBJECTPROPERTY()
functie om het type van een object te controleren. Meer specifiek kunt u controleren of het een specifiek type is of niet.
Bijvoorbeeld de IsTable
eigenschap vertelt u of het een tabel is, de IsView
eigenschap vertelt u of het een weergave is, enz.
Dit artikel biedt enkele basisvoorbeelden waarmee wordt gecontroleerd of een object een tabel, weergave, opgeslagen procedure of functie met tabelwaarde is.
Voorbeeld 1 – Controleer op tabel
Hier is een voorbeeld dat controleert of een object een tabel is.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsTable') AS [IsTable];
Resultaat:
+-----------+ | IsTable | |-----------| | 1 | +-----------+
Hier is de objectnaam Artists
en het schema is dbo
.
In dit geval is het resultaat 1
, wat aangeeft dat het object in feite een tabel is.
Voorbeeld 2 – Controleren op weergave
Hier is een voorbeeld dat controleert of een object een weergave is.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsView') AS [IsView];
Resultaat:
+----------+ | IsView | |----------| | 0 | +----------+
In dit geval controleer ik hetzelfde object uit het vorige voorbeeld, en dus weten we al dat het geen weergave is. Daarom is het resultaat 0
, wat aangeeft dat het geen weergave is.
Hier is nog een voorbeeld, dit keer is het object in feite een uitzicht:
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.RockAlbums'), 'IsView') AS [IsView];
Resultaat:
+----------+ | IsView | |----------| | 1 | +----------+
Merk op dat ik de USE Music;
. heb verwijderd deel, omdat ik al in die database zit. De OBJECTPROPERTY()
controleert alleen objecten met een schema in de huidige database.
Voorbeeld 3 – Voorwaardelijke verklaring
We kunnen het concept een stap verder brengen en de vorige voorbeelden opnemen in een IF
uitspraak. Op die manier kunnen we een enkele instructie uitvoeren om erachter te komen welk type het object is.
Hieronder staan basisvoorbeelden die eenvoudig het objecttype weergeven.
Tabel
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.';
Resultaat:
Table
In dit geval is het object een tafel.
Hier zijn meer voorbeelden die dezelfde instructie gebruiken, maar met verschillende objecttypes.
Bekijken
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.';
Resultaat:
View
Opgeslagen procedure
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.';
Resultaat:
Stored Procedure
Tabel gewaardeerde functie
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.';
Resultaat:
Table-valued Function
U kunt meer typen aan de instructie toevoegen om deze nuttiger te maken. Ik heb de argumenten vermeld die OBJECTPROPERTY()
accepteert op deze pagina. Dit zijn echter niet allemaal objecttypen - er zijn veel verschillende eigenschappen waarop u kunt controleren.
Zie de Microsoft-documentatie voor een volledige uitleg van elke eigenschap.