Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Vérifier si un objet est une table, une vue ou une procédure stockée dans SQL Server à l'aide de la fonction OBJECTPROPERTY()

Dans SQL Server, vous pouvez utiliser le OBJECTPROPERTY() fonction pour vérifier le type d'un objet. Plus précisément, vous pouvez vérifier s'il s'agit ou non d'un type spécifique.

Par exemple, le IsTable propriété vous indique s'il s'agit ou non d'une table, le IsView la propriété vous indique s'il s'agit ou non d'une vue, etc.

Cet article propose quelques exemples de base qui vérifient si un objet est une table, une vue, une procédure stockée ou une fonction table.

Exemple 1 - Vérifier le tableau

Voici un exemple qui vérifie si un objet est une table.

USE Music; 
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsTable') AS [IsTable];

Résultat :

+-----------+
| IsTable   |
|-----------|
| 1         |
+-----------+

Ici, le nom de l'objet est Artists et le schéma est dbo .

Dans ce cas, le résultat est 1 , ce qui indique que l'objet est en fait une table.

Exemple 2 - Vérifier la vue

Voici un exemple qui vérifie si un objet est une vue.

USE Music; 
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsView') AS [IsView];

Résultat :

+----------+
| IsView   |
|----------|
| 0        |
+----------+

Dans ce cas, je vérifie le même objet de l'exemple précédent, et nous savons donc déjà que ce n'est pas une vue. Par conséquent, le résultat est 0 , ce qui indique qu'il ne s'agit pas d'une vue.

Voici un autre exemple, cette fois l'objet est en fait une vue :

SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.RockAlbums'), 'IsView') AS [IsView];

Résultat :

+----------+
| IsView   |
|----------|
| 1        |
+----------+

Notez que j'ai supprimé le USE Music; partie, parce que je suis déjà dans cette base de données. Le OBJECTPROPERTY() ne vérifie que les objets de portée schéma dans la base de données actuelle.

Exemple 3 – Instruction conditionnelle

Nous pouvons pousser le concept un peu plus loin et incorporer les exemples précédents dans un IF déclaration. De cette façon, nous pouvons exécuter une seule instruction pour savoir de quel type est l'objet.

Vous trouverez ci-dessous des exemples de base qui génèrent simplement le type d'objet.

Tableau

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.';

Résultat :

Table

Dans ce cas, l'objet est un tableau.

Voici d'autres exemples qui utilisent la même instruction, mais avec des types d'objets différents.

Afficher

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.';

Résultat :

View

Procédure stockée

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.';

Résultat :

Stored Procedure

Fonction de table

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.';

Résultat :

Table-valued Function

Vous pouvez ajouter d'autres types à l'instruction pour la rendre plus utile. J'ai listé les arguments que OBJECTPROPERTY() accepte sur cette page. Cependant, tous ne sont pas des types d'objets - il existe de nombreuses propriétés différentes que vous pouvez vérifier.

Pour une explication complète de chaque propriété, consultez la documentation Microsoft.