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 :

Besoin d'aide avec UPDATE et BOUCLE


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut Besoin d'aide avec UPDATE et BOUCLE
    Bonjour,

    J'ai un gros soucis et je bloque dessus depuis ce matin sans trouver la réponse.
    J'essaie de faire une boucle avec une requête UPDATE, je m'explique :

    J'ai crée une colonne NumLigne et je voudrai mettre dans cette colonne le n° de la ligne de ma table, c'est pourquoi j'utilise une boucle WHILE mais le problème c'est que cela ne fonctionne pas.

    Voici le code :

    DECLARE @Cpt INT;

    SET @Cpt = 0;

    WHILE @Cpt < (SELECT COUNT(*) FROM TI_Ventes)
    Begin
    UPDATE TI_Ventes SET NumLigne = @Cpt, IdDate_T1 = CAST (PLL_IdCommande as CHAR(6)) + CAST(YEAR(PLL_DateLivraison) as CHAR (4)) + CAST(MONTH(PLL_DateLivraison) as CHAR (2));

    SET @Cpt = @Cpt + 1;
    END

    Ce qui ce passe c'est que la requête met à jour le contenu de ma table à chaque passage dans la boucle.

    Ex :

    Si j'ai 5 lignes et bien je vais avoir une boucle qui va s'exécuter 5 fois et la mise à jour va me mettre 5 fois l'ensemble de la table à jour ce qui au final me mettra 5 partout dans la colonne NumLigne.

    Si vous pouviez m'aider car là je bloque.

    Merci d'avance.

    Johann36

  2. #2
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Dans ton update, tu ne spécifie pas la ligne que tu veux mettre à jour. Il met donc naturellement à jour l'ensemble des lignes de ta table.
    SQL Server, comme beaucoup (tous?) des SGBD est ensembliste.

    De plus, prend garde car la notion de numéro de ligne n'a aucun sens. cf cet article de SQLPro.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Ok message reçu 5/5 mais là le problème devient plus compliqué.

    J'ai une table Vente et une table facture mais aucune relation entre les deux.
    J'avais donc créé une colonne index contenant la concaténation du n° de facture avec les 4 chiffres de l'année + les 2 chiffres du mois.

    Détails :

    Table Vente
    171366|2008-01-25|25.000|25.000|1569700|CS40|17136620081
    171366|2008-02-22|25.000|25.000|1569700|CS40|17136620082
    171366|2008-04-04|25.000|25.000|1569700|CS40|17136620084
    171366|2008-04-18|25.000|25.000|1569700|CS40|17136620084
    171366|2008-06-13|25.000|25.000|1569700|CS40|17136620086

    Table Facture
    200801|2008-01-22|0810470|1569700|171366|8103|121|CS40|17136620081
    200802|2008-02-19|0818600|1569700|171366|8103|121|CS40|17136620082
    200804|2008-04-03|0831160|1569700|171366|8103|121|CS40|17136620084
    200804|2008-04-15|0834040|1569700|171366|8103|121|CS40|17136620084
    200806|2008-06-12|0850220|1569700|171366|8103|121|CS40|17136620086

    Le soucis c'est que lorsque j'exécute la requête suivante :
    "SELECT * FROM Ventes left outer JOIN Factures ON IdDate_T1 like IdDate_T2 WHERE FAC_DateFacture < PLL_DateLivraison order by IdDate_T2"
    (En fait ce que je demande c'est de concaténer la table Vente et Facture avec comme condition que la date de Facture soit inférieur à la date de livraison) je me retrouve avec des doublons.

    Je cherche une solution pour que cela fonctionne correctement mais sans relation entre les deux cela devient compliqué.

    Est-ce que tu aurais une idée à ce problème qui effectivement est un problème ?

    Merci d'avance.

    Jb_One73

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonsoir,

    Il est bizarre que vos ventes ne soient pas associées à une facture.
    Précisez le nom de vos colonnes dans vos tables SVP

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Oui je sais c'est ça mon gros soucis c'est que je n'ai aucun moyen de faire une jointure entre les 2.

    Table Vente
    IdCmd |DateLivrais |QteDem|QteLiv |IdClient |CodeProd|IdDate_T1
    171366|2008-01-25|25.000 |25.000|1569700|CS40 |17136620081

    Table Facture
    DateExtra|Datefac |NumFact|Client |Cmd |CdVente|
    200801 |2008-01-22|0810470|1569700|171366|8103

    |Famille|Article |IdDate_T2
    |121 |CS40 |17136620081

    Pour info :
    IdDate_T1 est la concaténation de IdCmd + les 6 1er chiffres de la DateLivrais.

    IdDate_T2 est la concaténation de Cmd + les 6 1er chiffres de la DateFac.

    As-tu besoin d'autres informations ?

    Comme tu vois je n'ai aucun repère et je n'ai pas de relation entre les 2 tables on m'a donné ça et on m'a dit débrouille toi, voilà ... .

    Merci d'avance.

  6. #6
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 790
    Points
    6 790
    Billets dans le blog
    4
    Par défaut
    Je vois que [Table Vente].idCmd = [Table Facture].Cmd

    Peut-être ta jointure peut se faire là dessus.

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

Discussions similaires

  1. Besoin d'aide avec boucle
    Par java250r dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/04/2012, 15h13
  2. SQL Server + C#, besoin d'aide pour update "non simple" avec bindingsource
    Par robertopowa dans le forum Accès aux données
    Réponses: 1
    Dernier message: 30/04/2010, 10h00
  3. [ASA] J'ai besoin d'aide avec sybase et vb6 svp !!
    Par tibo830 dans le forum SQL Anywhere
    Réponses: 7
    Dernier message: 12/05/2006, 10h09
  4. Réponses: 2
    Dernier message: 29/08/2003, 17h52
  5. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29

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