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.