Précédent   Forum des professionnels en informatique > Bases de données > Autres SGBD > SQLite
SQLite Forum d'entraide SQLite
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/12/2011, 13h57   #1
Membre éprouvé
 
Inscription : octobre 2002
Messages : 482
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 482
Points : 403
Points : 403
Par défaut Problème avec INSERT OR IGNORE et autoincréments

Bonjour,

Soit une simple table Countries définie comme suit:
Code :
1
2
3
4
5
6
CREATE TABLE "Countries"(
  "ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
  "Name" VARCHAR(45) NOT NULL,
  CONSTRAINT "Name_UNIQUE"
    UNIQUE("Name")
);
Je souhaite y insérer des données par lot sans être embêté en cas de doublon:
Code :
1
2
3
INSERT OR IGNORE INTO Countries VALUES (NULL, 'Albanie');
INSERT OR IGNORE INTO Countries VALUES (NULL, 'Algérie');
INSERT OR IGNORE INTO Countries VALUES (NULL, 'Angola');
Mais le problème est que quand une requête échoue pour cause de doublon, l'ID est tout de même auto-incrémenté, si bien que si je fais ensuite ceci:

Code :
1
2
3
INSERT OR IGNORE INTO Countries VALUES (NULL, 'Albanie');
INSERT OR IGNORE INTO Countries VALUES (NULL, 'Algérie');
INSERT OR IGNORE INTO Countries VALUES (NULL, 'Andorre');
Code :
SELECT * FROM Countries
me donne la séquence suivante:
Code :
1
2
3
4
5
6
ID | Name
------------
1  | Albanie
2  | Algérie
3  | Angola
6  | Andorre
alors que je souhaiterais avoir 1, 2, 3, *4*...

Comment faire pour contourner ce problème ? INSERT OR FAIL ou INSERT OR ABORT interrompent le traitement donc ne sont pas la solution !?

Merci de votre aide...
GoustiFruit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 21h43   #2
Membre éprouvé
 
Inscription : octobre 2002
Messages : 482
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 482
Points : 403
Points : 403
Bon c'est un peu tiré par les cheveux mais cette méthode marche:

Code :
1
2
3
INSERT INTO Countries (Name)
SELECT 'Andorre'
WHERE NOT EXISTS (SELECT 1 FROM Countries WHERE Name = 'Andorre');
GoustiFruit est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h34.


 
 
 
 
Partenaires

Hébergement Web