I SQL Server kan du bruge OBJECTPROPERTY()
funktion til at kontrollere et objekts type. Mere specifikt kan du tjekke, om det er en bestemt type eller ej.
For eksempel IsTable
egenskaben fortæller dig, om det er en tabel eller ej, IsView
ejendom fortæller dig, om det er en udsigt osv.
Denne artikel giver et par grundlæggende eksempler, der kontrollerer, om et objekt er en tabel, visning, lagret procedure eller funktion med en tabelværdi.
Eksempel 1 – Tjek efter tabel
Her er et eksempel, der kontrollerer, om et objekt er en tabel.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsTable') AS [IsTable];
Resultat:
+-----------+ | IsTable | |-----------| | 1 | +-----------+
Her er objektnavnet Artists
og skemaet er dbo
.
I dette tilfælde er resultatet 1
, hvilket indikerer, at objektet i virkeligheden er en tabel.
Eksempel 2 – Check for View
Her er et eksempel, der kontrollerer, om et objekt er en visning.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsView') AS [IsView];
Resultat:
+----------+ | IsView | |----------| | 0 | +----------+
I dette tilfælde tjekker jeg det samme objekt fra det forrige eksempel, og så ved vi allerede, at det ikke er en visning. Derfor er resultatet 0
, hvilket indikerer, at det ikke er en udsigt.
Her er et andet eksempel, denne gang er objektet i virkeligheden en visning:
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.RockAlbums'), 'IsView') AS [IsView];
Resultat:
+----------+ | IsView | |----------| | 1 | +----------+
Bemærk, at jeg fjernede USE Music;
del, fordi jeg allerede er i den database. OBJECTPROPERTY()
kontrollerer kun skema-omfattede objekter i den aktuelle database.
Eksempel 3 – Betinget erklæring
Vi kan tage konceptet et skridt videre og inkorporere de foregående eksempler i en IF
udmelding. På den måde kan vi køre en enkelt sætning for at finde ud af, hvilken type objektet er.
Nedenfor er grundlæggende eksempler, der blot udskriver objekttypen.
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.';
Resultat:
Table
I dette tilfælde er objektet en tabel.
Her er flere eksempler, der bruger den samme sætning, men med forskellige objekttyper.
Vis
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.';
Resultat:
View
Lagret 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.';
Resultat:
Stored Procedure
Tabelværdi-funktion
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.';
Resultat:
Table-valued Function
Du kan tilføje flere typer til erklæringen for at gøre den mere nyttig. Jeg har angivet argumenterne, som OBJECTPROPERTY()
accepterer på denne side. Ikke alle disse er dog objekttyper – der er mange forskellige egenskaber, som du kan tjekke efter.
For en fuldstændig forklaring af hver egenskab, se Microsoft-dokumentationen.