sql >> Database teknologi >  >> RDS >> Sqlserver

Tjek, om et objekt er en tabel, visning eller lagret procedure i SQL Server ved hjælp af OBJECTPROPERTY()-funktionen

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.


  1. MySQL SIN() Funktion – Returner sinus for et tal i MySQL

  2. Migrering af din Cassandra-klynge

  3. Sådan installeres SQL Server på Windows

  4. Hvordan indsætter jeg flere værdier i en postgres-tabel på én gang?