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

Langage SQL Discussion :

insert avec doublons


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut insert avec doublons
    Bonjour,

    J'ai une table qui a pour clé primaire BOREF (Le SGBD est SQL Server CE). Le problème est que lorsque j'insère un enregistrement, et que sa clé primaire existe déjà dans la table, il abandonne l'insertion. Ceci est normal, mais je voudrais pouvoir lui dire d'insérer les enregistrements qui n'existent pas, et de modifier les existant, ou au pire de les ignorer. J'ai entendu parler de ON DUPLICATE KEY UPDATE, IGNORE, mais ceci ne marche que pour MySql.

    Est-ce qu'il y aurait quelquechose d'équivalent pour SQL Server?

    Pour l'instant je fais un delete puis un insert, ce n'est pas super...

    Est-ce qu'il y aurait moyen de faire quelquechose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO ma_table 
    VALUES(ref, var1, var2) 
    WHERE ref NOT IN 
    (SELECT ref FROM ma_table2)
    Que me conseiller vous de faire?

    Merci d'avance!

  2. #2
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    Non, il n'y a pas d'autre moyen. Tu peux aussi le faire en deux passages : UPDATE pour les données déjà existantes, puis INSERT pour les données non présentes.

  3. #3
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 209
    Billets dans le blog
    16
    Par défaut
    Est-ce qu'il y aurait moyen de faire quelquechose du genre :

    INSERT INTO ma_table
    VALUES(ref, var1, var2)
    WHERE ref NOT IN
    (SELECT ref FROM ma_table2)
    Concernant l'ajout de lignes, en supposant que la colonne ref représente la clé primaire de la table ma_table (et tant qu'à faire celle de la table table2) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     INSERT INTO ma_table (ref, var1, var2)
              SELECT ref, var1, var2
              FROM   table2 As X
              WHERE  NOT EXISTS (SELECT *
                                 FROM   ma_table Y
                                 WHERE X.ref = Y.ref
                                ) ;
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  4. #4
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 209
    Billets dans le blog
    16
    Par défaut
    Concernant l'update :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    update ma_table
         set var1 =  (select d.var1
                      from   table2 as d
                      where  ma_table.ref = d.ref
                     ),
             var2 =  (select d.var2
                      from   table2 as d
                      where  ma_table.ref = d.ref
                     )   
       where exists  (select *
                      from   table2 as d
                      where  ma_table.ref = d.ref
                     )
    ;
    Attention, s'il y a des valeurs en double pour la colonne ref dans la table table2, ça provoque l'annulation de la requête : prévoir une clé primaire pour table2.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    Bonjour,

    Je vous remercie pour vos réponses. En attendatn j'avais fait un select puis un insert ou un update suivant si il ya avait des résultats de mon select. Je vais essayer d'imbriquer cela.

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

Discussions similaires

  1. [MySQL] Insertion de doublon avec primary key
    Par darkbob dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/12/2006, 16h38
  2. insertion avec doublon
    Par epeichette dans le forum Requêtes
    Réponses: 6
    Dernier message: 19/05/2006, 15h49
  3. INSERT avec procédure stockée / Clef de type AutoInc
    Par bgdelphi dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/10/2003, 18h30
  4. PB: Insertion de doublon
    Par maxvador dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 04/09/2003, 12h07
  5. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 13h52

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