Besoin d'aide avecUPDATE et BOUCLE

Résolu
johann36 Messages postés 130 Date d'inscription dimanche 15 février 2004 Statut Membre Dernière intervention 9 mai 2017 - 6 août 2008 à 15:09
crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011 - 6 août 2008 à 23:38
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

3 réponses

crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011
6 août 2008 à 17:56
Dans ton UPDATE n'aurais-tu pas oublier une clause WHERE par Hasard??
3
johann36 Messages postés 130 Date d'inscription dimanche 15 février 2004 Statut Membre Dernière intervention 9 mai 2017
6 août 2008 à 19:54
Merci crn_c21 pour ta réponse,

En fait 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
0
crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011
6 août 2008 à 23:38
Tu as essayé avec un SELECT DISTINCT ?
0
Rejoignez-nous