sql >> Databasteknik >  >> RDS >> Sqlserver

Kontrollera om ett objekt är en tabell, vy eller lagrad procedur i SQL Server med funktionen OBJECTPROPERTY()

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.


  1. Introduktion till SQL Joins

  2. Hur skapar man en ny databas efter att ha installerat Oracle Database 11g Express Edition?

  3. MySQL ger alla privilegier till databasen utom en tabell

  4. Java:Läser Blob från Oracle