IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

Problème avec INSERT OR IGNORE et autoincréments


Sujet :

SQLite

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut Problème avec INSERT OR IGNORE et autoincréments
    Bonjour,

    Soit une simple table Countries définie comme suit:
    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")
    );
    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
    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 : 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');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Countries
    me donne la séquence suivante:
    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
    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...

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    Bon c'est un peu tiré par les cheveux mais cette méthode marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO Countries (Name)
    SELECT 'Andorre'
    WHERE NOT EXISTS (SELECT 1 FROM Countries WHERE Name = 'Andorre');

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec insertion image
    Par technopole dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 26/06/2006, 21h45
  2. [VB6] Problème avec insertion d'icônes dans menu
    Par marsup54 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/03/2006, 21h38
  3. Réponses: 12
    Dernier message: 25/11/2005, 12h29
  4. Réponses: 3
    Dernier message: 10/05/2005, 11h02
  5. STL : std::set problème avec insert ...
    Par Big K. dans le forum MFC
    Réponses: 13
    Dernier message: 08/11/2003, 01h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo