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 :

ajout et mise à jour conditionés avec T-SQL


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 112
    Points : 94
    Points
    94
    Par défaut ajout et mise à jour conditionés avec T-SQL
    Bonjour tout le monde,

    J'ai une table qui contient des numero de clients, et les dates d'envoie de lettre qui correspont à chaque client... Tout fonctionnait tres bien, jusqu'au jour où je me trouve devant un cas où on peut envoyer des lettres à la meme personne plus d'une fois...
    j'ai pensé d'abord ajouter des champs, date1, date2, date3... mais jusqu'où ? je ne sais pas combien de fois on va envoyer des lettre à la meme personne, donc l'idée etait de creer une table qui va contenir 2 champs: id_client et date, avec une clé primaire concatenée des 2 champs... donc chaque fois qu'on envoie une nouvelle fois, j'insert une ligne dans la nouvelle table avec le id_client + l'ancienne date qu'il y avait dans la table principale, puis je peut modifier la date dans la table principale...
    resultat de la manipulation: dans ma table principale j'ai juste la date du dernier envoie, et si je veux voir l'historique des envoie je n'ai qu'à consulter la 2eme table...
    voila c'etait la situation, j'utilise un package DTS qui s'occupe de cette mis à jour + insertion, sauf qu'il y a peut etre une erreur dans la logique ... quand j'ai executé ce code la derniere fois, il a été modifier le contenu de toute ma table, alors que ça doit toucher juste une selection definie, voici le code:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    DECLARE @send_date smalldatetime,  @id_client nvarchar(12)
    
    DECLARE lineCursor CURSOR local FOR 
    SELECT     id_client, send_date                
    FROM         tablePrincipale
    WHERE     sending = 'j'  --ceci est la condition de selection
    
    open linecursor
    
    fetch next from linecursor into @id_client, @send_date
    
    while @@fetch_status = 0 
        begin
            if @send_date is  not null -- s'il y a deja une date d'envoi
            begin
                  insert into tableSecondaire values (@id_client, @send_date)
            end
    
            UPDATE    tablePrincipale SET  send_date = CAST(LEFT(GETDATE(), 12) AS smalldatetime) -- et dans tout les cas, je met à jour les dates avec la date d'aujourdui
    
            fetch next from linecursor into @kvnr, @send_date
        end
    
    close linecursor

    voila, j'espere que j'ai assez clair.
    vos conseils et remarques seront tres appreciés!

    Merci beaucoup

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Points : 1 646
    Points
    1 646
    Par défaut
    si tu fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE    tablePrincipale SET  send_date = CAST(LEFT(GETDATE(), 12) AS smalldatetime)

    c'est normal. tu mets tous les champs de ta table à jour. à mon avis tu as oublié une condition where. En fait à chaque passage de la boucle tu fais un update pour rien. il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where sending='j' and id_client=@id_client and send_date=@send_date

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 112
    Points : 94
    Points
    94
    Par défaut
    oops, comme si je decouvre que je suis con

    le fait d'utliser le curseur, je pensais que ça sera filtré d'office !

    en fait, il me semble que je dois rajouté juste une partie de la condition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where id_client=@id_client and send_date=@send_date
    vu que sending='j' est repris dans la condition du curseur... où peut etre je me trompe ?!

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Points : 1 646
    Points
    1 646
    Par défaut
    il faut reprendre aussi sending='j' l'update n'a rien à voir avec le curseur. ca le ferait si tu remplissais une table temporaire à partir de ton curseur mais ca n'est pas le cas.

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 112
    Points : 94
    Points
    94
    Par défaut
    voila,
    j'ai essayé de faire la mis à jour, en ayant que ça comme condition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where id_client=@id_client
    et ça fonctionne, car la variable @id_client est chargé par le curseur, donc quand je passe dans la boucle j'ai à chaque fois un id_client qui repond au critere du curseur...

    Merci beaucoup rattlehead

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

Discussions similaires

  1. [MySQL] Mise à jour mysql avec une checkbox non checké
    Par lodan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/08/2006, 16h45
  2. mise à jours Acces avec données interbase
    Par milielf dans le forum InterBase
    Réponses: 6
    Dernier message: 19/06/2006, 14h49
  3. Mise à jour de données sous SQL server
    Par Brunier dans le forum Bases de données
    Réponses: 6
    Dernier message: 05/06/2006, 14h42
  4. pb de mise à jour différée avec ACCESS, ADO et DELPHI 7
    Par QAYS dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/01/2006, 08h15
  5. Automatiser la mise à jour de la bD SQL SERVER from Access
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/11/2003, 15h23

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