Quelqu'un peut-il me dire s'il y a une différence entre
DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]
Je pose la question parce que j'utilise un 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?
La syntaxe SQL standard est
DROP TABLE table_name;
IF EXISTS
n'est pas standard; différentes plates-formes peuvent le prendre en charge avec une syntaxe différente ou ne pas le prendre en charge du tout. Dans PostgreSQL, la syntaxe est la suivante:
DROP TABLE IF EXISTS table_name;
Le premier générera une erreur si la table n'existe pas ou si d'autres objets de base de données en dépendent. Le plus souvent, les autres objets de base de données seront des références de clé étrangère, mais il peut y en avoir d'autres également. (Vues, par exemple.) La seconde ne générera pas d'erreur si la table n'existe pas, mais générera quand même une erreur si d'autres objets de base de données en dépendent.
Pour supprimer une table et tous les autres objets qui en dépendent, utilisez l’un d’eux.
DROP TABLE table_name CASCADE;
DROP TABLE IF EXISTS table_name CASCADE;
Utilisez CASCADE avec le plus grand soin.
Ce n'est pas ce qui est demandé directement. Mais cherchant comment faire correctement les tables de dépôt, je suis tombé sur cette question, comme beaucoup d'autres, je suppose.
À 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;
Vous avez oublié le table
dans votre syntaxe:
drop table [table_name]
qui laisse tomber une table.
En utilisant
drop table if exists [table_name]
vérifie si la table existe avant de la laisser tomber.
S'il existe, il est supprimé.
Sinon, aucune erreur ne sera générée et aucune action ne sera entreprise.
DROP TABLE IF EXISTS [table_name]
il vérifie d’abord si la table existe, s’il supprime la table en
DROP TABLE [table_name]
il supprime sans vérification, donc s'il n'existe pas, il se termine avec une erreur
Si aucune table portant ce 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 venez de faire un DROP IF EXISTS
et de l’oublier.
Bien sûr, votre moteur de base de données actuel peut ne pas prendre en charge cette option, il est difficile d’en savoir plus sur l’erreur avec les informations que vous fournissez.