Bonjour,
Soit une simple table Countries définie comme suit:
Je souhaite y insérer des données par lot sans être embêté en cas de doublon:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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") );
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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');
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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');me donne la séquence suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM Countries
alors que je souhaiterais avoir 1, 2, 3, *4*...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ID | Name ------------ 1 | Albanie 2 | Algérie 3 | Angola 6 | Andorre
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...
Partager