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

Développement SQL Server Discussion :

Update or insert entre 2 tables


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 32
    Points : 22
    Points
    22
    Par défaut Update or insert entre 2 tables
    Bonjour

    Je m'adresse a vous parce que je suis bloquer sur quelque chose qui doit etre tres simple.

    Quotidiennement, je reçois des informations dans une table temporaire (T_Tempo). Je voudrais utiliser les valeurs de cette table pour mettre a jour
    une seconde table de stockage (T_stock).

    Pour cela, je dois ajouter les lignes de ma tables T_Tempo qui n'existe pas encore dans ma table T_Stock.
    Si l'information existe deja je dois juste mettre a jour certaines colonnes.


    J'ai donc utiliser l'idée suivante :

    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
    16
     
     
    UPDATE T_Stock 
    SET S_Moyenne = TP.Moy
    From  T_Tempo TP WITH (NOLOCK)
    WHERE TP.Trans = 'O'  
    + Condition ...
     
     
    IF @@ROWCOUNT=0
     
        INSERT INTO T_Stock 
        Select * 
        From  T_Tempo TP WITH (NOLOCK)
        WHERE TP.Trans = 'O'
    + condition ..

    Le probleme c'est que celui ci fait bien les updates mais comme le nombre de résultat n'est pas nul, je ne fais jamais les inserts.

    Je n'arrive pas a trouver une solution optimiser qui me permettrait de faire un update de toute mes lignes existant deja dans ma table de stockage et un insert des lignes non existante.

    Une fois les update et inserte fais, je souhaiterais supprimer les lignes correctement traité de ma table temporaire

    rien de compliquer a premiere vu mais apparament mon cerveau est indisponible en ce moment ^^

    Merci a tous pour vos piste de solution

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    La commande MERGE semble toute indiquée pour votre besoin. Elle vous permettra, en une seule commande de :
    1/ mettre à jour les lignes existantes dans la table cible
    2/ ajouter les nouvelles lignes dans la table cible
    3/ sortir les identifiants des lignes traitées dans une table temporaire en vue de leur suppression dans la table source.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 32
    Points : 22
    Points
    22
    Par défaut Récupération des lignes traités via un merge
    Bonjour

    Merci pour la réponse en effet le merge répond parfaitement a mon problème est c'est quelque chose que je ne connaissait absolument pas.

    Mes update et insert se passe parfaitement bien par contre je n'est pas trouver comment récupérer les numéro de ligne correctement traité afin de les supprimer de ma table ?

    Mieux encore l'idéal serait d'utiliser les numéro de lignes afin de mettre a jour un indicateur de ma table temporaire ( est garder ainsi un historique sur une certaine période).
    Si quelqu'un pourrait m'aider

    Merci

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par Linconnu Voir le message
    Mes update et insert se passe parfaitement bien par contre je n'est pas trouver comment récupérer les numéro de ligne correctement traité afin de les supprimer de ma table ?
    Utilisez la clause OUTPUT

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 32
    Points : 22
    Points
    22
    Par défaut
    En effet cela fonctionne parfaitement

    Merci

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

Discussions similaires

  1. Update or Insert dans plusieurs tables
    Par Linio dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 18/08/2010, 12h54
  2. insertion entre deux tables
    Par h0ussam dans le forum Accès aux données
    Réponses: 1
    Dernier message: 16/10/2008, 08h59
  3. Update et insert dans une table de backup
    Par PunkMetal dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/08/2008, 05h41
  4. requete update et insertion dans 2 tables
    Par croke dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 28/05/2008, 12h45

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