I SQL Server kan du använda OBJECTPROPERTY()
funktion för att kontrollera ett objekts typ. Mer specifikt kan du kontrollera om det är en specifik typ eller inte.
Till exempel, IsTable
egenskapen talar om för dig om det är en tabell eller inte, IsView
egenskapen talar om för dig om det är en vy eller inte.
Den här artikeln ger några grundläggande exempel som kontrollerar om ett objekt är en tabell, vy, lagrad procedur eller tabellvärderad funktion.
Exempel 1 – Sök efter tabell
Här är ett exempel som kontrollerar om ett objekt är en tabell.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsTable') AS [IsTable];
Resultat:
+-----------+ | IsTable | |-----------| | 1 | +-----------+
Här är objektnamnet Artists
och schemat är dbo
.
I det här fallet är resultatet 1
, vilket indikerar att objektet i själva verket är en tabell.
Exempel 2 – Sök efter vy
Här är ett exempel som kontrollerar om ett objekt är en vy.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsView') AS [IsView];
Resultat:
+----------+ | IsView | |----------| | 0 | +----------+
I det här fallet kontrollerar jag samma objekt från föregående exempel, och så vi vet redan att det inte är en vy. Därför är resultatet 0
, vilket indikerar att det inte är en vy.
Här är ett annat exempel, den här gången är objektet i själva verket en vy:
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.RockAlbums'), 'IsView') AS [IsView];
Resultat:
+----------+ | IsView | |----------| | 1 | +----------+
Observera att jag tog bort USE Music;
del, eftersom jag redan finns i den databasen. OBJECTPROPERTY()
kontrollerar endast objekt med schemaomfattning i den aktuella databasen.
Exempel 3 – Villkorsförklaring
Vi kan ta konceptet ett steg längre och infoga de tidigare exemplen i en IF
påstående. På så sätt kan vi köra en enda sats för att ta reda på vilken typ av objektet.
Nedan finns grundläggande exempel som helt enkelt matar ut objekttypen.
Tabell
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 det här fallet är objektet en tabell.
Här är fler exempel som använder samma sats, men med olika objekttyper.
Visa
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
Lagrad procedur
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
Tabellvärderad 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 lägga till fler typer till uttalandet för att göra det mer användbart. Jag har listat argumenten som OBJECTPROPERTY()
accepterar på denna sida. Alla dessa är dock inte objekttyper – det finns många olika egenskaper som du kan kontrollera efter.
För en fullständig förklaring av varje egenskap, se Microsofts dokumentation.