Boucle en SQL

Boucle en SQL - SQL/NoSQL - Programmation

Marsh Posté le 27-03-2018 à 14:16:46    

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

Reply

Marsh Posté le 27-03-2018 à 14:16:46   

Reply

Marsh Posté le 27-03-2018 à 14:53:22    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed