sql >> Database >  >> RDS >> Sqlserver

Controleer of een object een tabel, weergave of opgeslagen procedure is in SQL Server met behulp van de OBJECTPROPERTY()-functie

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.


  1. String- en NULL-waarden samenvoegen in SQL Server

  2. MySQL verleent privileges aan gebruiker voor database

  3. Hoe maak je een multi-tenant database met gedeelde tabelstructuren?

  4. Postgres sql-querysyntaxisfout invoegen van phpPgAdmin