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

MS SQL Server Discussion :

[SQL2k5SP1] Maj d'une table par importation


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 60
    Points : 55
    Points
    55
    Par défaut [SQL2k5SP1] Maj d'une table par importation
    Bonjour

    j'ai une table de produits fourni par mon client. régulièrement il m'envoie des mises à jour, des compléments ...
    aujourd'hui j'ai un script SSIS qui importe son fichier dans une de mes tables tampon.

    ma question est: faire un TSQL simple qui met à jour les lignes qui sont déjà dans la table principale, et ajoute les nouveaux.

    ça parait simple mais ma clé primaire est composée de 2 colonnes qui sont 'produit' et 'unité', avec par exemple : 'produit1,'unite1' ; 'produit1','unite2' ; 'produit1','unite3' ; 'produit2','unite1' ; etc...
    un simple insert into select déclanche une violation de clé primaire à cause des doublons.

    merci pour vos suggestions.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    si tu n'a pas trop de données fais:

    if not exists(select 1 from table where cle1=valeur1 and cle2=valeur2)
    insert ...
    else
    update...

    A+
    serge

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    effectivemment ca marche serge a prioir.

    Perso j'opertais plutôt vers quelque chose de plus algébrique.

    1- J'ajoute une colonne STATUT dans la table "tampon" avec une valeur par défaut disont = à "I' (pour insert)

    2- Je mets à jour le STATU à 'U' dans la table tampon pour les clefs qui sont dans la table de prod
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE TT
    SET TT.STATUT = 'U'
    FROM tableTampon TT INNER JOIN maTable M
    ON M.CLE1 = TT.CLE 1
    AND M.CLE2 = TT.CLE2
    ...
    AND M.CLEN = TT.CLEN
    3- Ensuite il suffit bêtement de faire :
    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
     
    INSERT INTO maTable
    SELECT ...,..,..
    FROM TableTAMPON
    WHERE STATUT = 'I'
     
    UPDATE M
    SET M.... = TT....,
          M....=TT.;;;
    FROM tableTampon TT INNER JOIN maTable M
    ON M.CLE1 = TT.CLE 1
    AND M.CLE2 = TT.CLE2
    ...
    AND M.CLEN = TT.CLEN
    WHERE TT.STATUT = 'U'

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 60
    Points : 55
    Points
    55
    Par défaut
    Merci ZERS pour ta réponse, c'est excellent.
    je m'en vais de ce pas faire tout ça

    bonne fin de journée

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Autre possibilité :

    INSERT...WHERE NOT IN(...)
    UPDATE....WHERE cle source=cle destination

    C'est rapide et simple.

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

Discussions similaires

  1. MAJ dans une table conditionnée par la valeur d'un de ses champs
    Par NicolasTT dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 24/03/2011, 15h31
  2. Réponses: 4
    Dernier message: 31/10/2007, 20h27
  3. Erreur de maj d'une table !
    Par smail21 dans le forum Bases de données
    Réponses: 6
    Dernier message: 30/08/2005, 15h18
  4. Réponses: 6
    Dernier message: 28/12/2004, 16h09
  5. MAJ d'une table sous SQL Server par insertion
    Par keish dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/06/2003, 16h23

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