185 votes

ABANDON SI EXISTE VS ABANDON ?

Quelqu'un peut-il me dire s'il y a une différence entre

 DROP IF EXISTS [TABLE_NAME]
 DROP [TABLE_NAME]

Je pose cette question car j'utilise le modèle JDBC dans mon application Web MVC. Si j'utilise DROP [TABLE_NAME] l'erreur indique que la table existe. Et si j'utilise DROP IF EXISTS [TABLE_NAME] cela indique une mauvaise grammaire SQL. Quelqu'un peut-il aider?

38voto

Squazz Points 1993

Ce n'est pas ce qui est demandé directement. Mais en cherchant comment supprimer correctement les tables, je suis tombé sur cette question, comme je suppose que beaucoup d'autres le font aussi.

À partir de SQL Server 2016+, vous pouvez utiliser

 DROP TABLE IF EXISTS dbo.Table

Pour SQL Server <2016, ce que je fais est le suivant pour une table permanente

 IF OBJECT_ID('dbo.Table', 'U') IS NOT NULL 
  DROP TABLE dbo.Table; 

Ou ceci, pour une table temporaire

 IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL
  DROP TABLE #T; 

21voto

juergen d Points 85039

Vous avez oublié le table dans votre syntaxe :

 drop table [table_name]

qui laisse tomber une table.

Utilisant

 drop table if exists [table_name]

vérifie si la table existe avant de la supprimer. S'il existe, il est supprimé. Sinon, aucune erreur ne sera générée et aucune action ne sera entreprise.

4voto

Flakron Bytyqi Points 2279
DROP TABLE IF EXISTS [table_name]

il vérifie d'abord si la table existe, si c'est le cas, il supprime la table tandis que

 DROP TABLE [table_name]

il supprime sans vérifier, donc s'il n'existe pas, il se termine avec une erreur

4voto

SJuan76 Points 16867

Si aucune table avec un tel nom n'existe, DROP échoue avec une erreur alors que DROP IF EXISTS ne fait rien.

Ceci est utile si vous créez/modifiez votre base de données avec un script ; de cette façon, vous n'avez pas à vous assurer manuellement que les versions précédentes de la table sont supprimées. Vous faites juste un DROP IF EXISTS et vous l'oubliez.

Bien sûr, votre moteur de base de données actuel peut ne pas prendre en charge cette option, il est difficile d'en dire plus sur l'erreur avec les informations que vous fournissez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X