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

4 façons de vérifier si une table existe avant de la déposer dans SQL Server (T-SQL)

Déposer une table en SQL facile. Vous utilisez simplement DROP TABLE myTablemyTable est le nom de la table que vous souhaitez supprimer. Vous pouvez utiliser cette méthode pour supprimer une table dans SQL Server via un script T-SQL.

Mais vous obtiendrez une erreur si la table n'existe pas réellement. Autrement dit, à moins que vous ne vérifiiez d'abord l'existence de la table.

Vous trouverez ci-dessous quatre façons d'utiliser T-SQL pour vérifier si la table existe avant de la supprimer.

Option 1 :Le IF EXISTS Article

Lors de l'utilisation de SQL Server 2016 ou version ultérieure, nous pouvons utiliser le IF EXISTS clause de la DROP TABLE pour vérifier l'existence de la table avant d'essayer de la supprimer :

DROP TABLE IF EXISTS t1;

Cela supprime une table appelée t1 s'il existe.

Voici le résultat de l'exécution de l'instruction ci-dessus lorsque la table existe (et est donc supprimée) :

Commands completed successfully.

Et voici ce que nous obtenons si nous réexécutons immédiatement l'instruction (c'est-à-dire lorsque la table n'existe pas) :

Commands completed successfully.

Même sortie. Ainsi, l'instruction s'exécute correctement, que la table existe ou non.

Voici ce qui se passe si nous essayons de supprimer la table sans utiliser le IF EXISTS clause :

DROP TABLE t1;

Résultat :

Msg 3701, Level 11, State 5, Line 1
Cannot drop the table 't1', because it does not exist or you do not have permission.

Option 2 :Vérifier l'ID de l'objet

Nous pouvons alternativement utiliser le OBJECT_ID() fonction pour vérifier l'existence de la table avant d'essayer de la supprimer :

IF OBJECT_ID(N'dbo.t1', N'U') IS NOT NULL
DROP TABLE dbo.t1;
GO

L'exemple ci-dessus vérifie l'ID d'objet pour un dbo.t1 table. Le deuxième argument de OBJECT_ID() spécifie le type d'objet que nous recherchons. Dans ce cas, nous utilisons U , qui est pour "table définie par l'utilisateur".

Le OBJECT_ID() renvoie le numéro d'identification d'objet de base de données d'un objet de portée schéma. Si l'objet existe, il ne retournera pas NULL, et par conséquent, nous pouvons supprimer la table. Si l'objet ne le fait pas existent, ou si vous n'y avez pas accès, la fonction renvoie NULL, et le DROP TABLE l'instruction ne s'exécutera pas.

Option 3 :Interroger information_schema.tables

Une autre façon de vérifier si une table existe déjà est d'interroger le information_schema.tables afficher :

IF EXISTS (
    SELECT * FROM information_schema.tables
    WHERE table_schema = 'dbo' AND table_name = 't1') 	
    DROP TABLE dbo.t1;

Cela fait une chose similaire à l'exemple précédent; il vérifie l'existence de la table et ne la crée que si elle n'existe pas.

Option 4 :Interroger sys.tables

Nous pouvons également interroger les sys.tables vue du catalogue système :

IF EXISTS (
    SELECT * FROM sys.tables t 
    JOIN sys.schemas s ON (t.schema_id = s.schema_id) 
    WHERE s.name = 'dbo' AND t.name = 't1') 	
    DROP TABLE dbo.t1;

SQL Server fournit de nombreuses autres façons de vérifier l'existence de tables. Voir 6 façons de vérifier si une table existe dans SQL Server pour des exemples.