Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3019 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Boucle en SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Boucle en SQL

n°2313204
razer69
Posté le 27-03-2018 à 14:16:46  profilanswer
 

Bonjour à tous,
 
 
Envirronement:SQL SERVER 2008R2
 
Je dispose d'une requete SQL qui recupere plusieurs valeur GroupoCliente

Code :
  1. Select distinct GroupoCliente, tgAgrupCliente.Descrip
  2. From taDctoVenta
  3. Left Outer Join  tgAgrupCliente on (tgAgrupCliente.codigo = taDctoVenta .GrupoCliente)
  4. where emp in ('001','002','003','004','005','006','007') and GrupoCliente IS NULL


 
qui doit récupérer la valeur GroupoCliente pour après réaliser une boucle pour executer des requetes à la suites
 

Code :
  1. insert into tgBaremoDcto (Codigo, Descrip,Estaller,EsAlmacen) VALUES (GroupoCliente+100,tgAgrupCliente.Descrip,'1','1')


 

Code :
  1. update tgClienteFac set tgClienteFac.TallBaremoDcto = (tgClienteFac.TallAgrupCliente +100)
  2. where tgClienteFac.Emp IN('001','002','003,'004','005','006','007')
  3. and tgClienteFac.TallAgrupCliente=GroupoCliente
  4. and tgClienteFac.TallBaremoDcto IS NULL)


etc...
 
Mais bloque pour réaliser script (je sais si on peut appeler ca un script), Comment commencer pour envoyer le résultat de GroupoCliente dans  une boucle, J'ai cru comprendre qu'il faut utiliser la  fonction WHILE  de SQL mais je bloque comment l'utiliser.
 
Si quelqu'un pourrais m'aiguiller dans cette demarche
 
Merci d'avance
 
razer69

mood
Publicité
Posté le 27-03-2018 à 14:16:46  profilanswer
 

n°2313207
Osx-Wind
Posté le 27-03-2018 à 14:53:22  profilanswer
 

Je sais pas si c'est optimisé, mais pourquoi pas un curseur ?
 
Dans ton cas, ça donnerai un truc comme ça :
 

Code :
  1. DECLARE @varGroupoCliente [typeVariable] (int, varchar etc..)
  2. DECLARE @varDescription [typeVariable] (pareil..)
  3. DECLARE CurGroupoCliente CURSOR FOR
  4.   SELECT distinct GroupoCliente, tgAgrupCliente.Descrip
  5.   FROM taDctoVenta
  6.   LEFT OUTER JOIN tgAgrupCliente ON (tgAgrupCliente.codigo = taDctoVenta .GrupoCliente)
  7.   WHERE emp IN ('001','002','003','004','005','006','007') AND GrupoCliente IS NULL
  8.   OPEN CurGroupoCliente
  9.   FETCH NEXT FROM CurGroupoCliente INTO @varGroupoCliente, @varDescription  -- insère les valeurs de la première ligne dans les variables
  10.   WHILE @@FETCH_STATUS = 0 -- ta boucle démarre ici
  11.   BEGIN
  12.   (tes requêtes là dedans, en utilisant les variables)
  13.   FETCH NEXT FROM CurGroupoCliente INTO @varGroupoCliente, @varDescription  -- insère les valeurs de la ligne suivante dans les variables
  14.   END
  15.   CLOSE CurGroupoCliente -- Important
  16.   DEALLOCATE CurGroupoCliente -- TRES IMPORTANT


 
En gros ça donnerait ça. Après, il me semblait avoir lu quelque part que les curseurs étaient pas top niveau perf, mais le SQL est loin d'être ma spécialité :x


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Boucle en SQL

 

Sujets relatifs
Requete SQL[résolu]SQL afficher valeur d'une ligne en fonction d'une condition
Ordre des tests dans un IF (SQL Server)[Java/SQL] JPA et contraintes de clef etrangere
[PHP] Utiliser 2 requêtes SQL dans 1 boucle ?Sortir requête SQL d'une boucle
SQL Server : boucle sur une table et affichage[Résolu] Newbie - requêtes SQL de sélection et boucle
[Résolu] Une boucle dans une requête SQL?[SQL] parametre en entrée et boucle sur les requêtes
Plus de sujets relatifs à : Boucle en SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR