Foreach en SQL ?

Messages postés
88
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
17 septembre 2006
- - Dernière réponse : bootchoz
Messages postés
88
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
17 septembre 2006
- 11 août 2006 à 14:45
existe-t-il un equivalent de foreach en SQL ?


je fais une selection sur une table et pour chaque resultat je traite un update sur une autre table de la base.



foreach (id_role in (select role.id_role from formulaire, proposer_role, role, etre_attribue where formulaire.id_form=proposer_role.id_form and proposer_role.id_role=role.id_role and role.id_role=etre_attribue.id_role and [mailto:etre_attribue.id_pers=@id_pers etre_attribue.id_pers=@id_pers] and [mailto:formulaire.id_form=@id_form formulaire.id_form=@id_form]))
 begin
  UPDATE etre_attribue
  SET[mailto:date_sup=@date_dup date_sup=@date_dup]
 end
merci de votre aide...
Afficher la suite 

5 réponses

Messages postés
261
Date d'inscription
mercredi 3 mai 2006
Statut
Modérateur
Dernière intervention
11 janvier 2010
2
0
Merci
Il n'y a pas de foreach en T-SQL sur SQL Server et pas non plus de boucles FOR.


Pour faire ce que tu explique plus haut, soit on utilise un curseur, mais qui en général est une solution particulièrement lente...
Ou on modifie la requête :








UPDATE

etre_attribue


SET
date_sup

=


@date_dup


WHERE
id_role

=



(
select



role
.
id_role

from
formulaire

,
proposer_role

,



role
,
etre_attribue

where
formulaire

.
id_form

=
proposer_role

.
id_form

and
proposer_role

.
id_role

=
role
.
id_role

and



role
.
id_role

=
etre_attribue

.
id_role

and
etre_attribue

.
id_pers

=
@id_pers

and
formulaire

.
id_form

=
@id_form



)



C'est plus rapide, plus propre, etc.

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
Commenter la réponse de cs_skweeky
Messages postés
88
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
17 septembre 2006
0
Merci
merci de ton attention mais la subquery retourne plusieurs valeurs. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Commenter la réponse de bootchoz
Messages postés
261
Date d'inscription
mercredi 3 mai 2006
Statut
Modérateur
Dernière intervention
11 janvier 2010
2
0
Merci
Remplace = par IN alors

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
Commenter la réponse de cs_skweeky
Messages postés
88
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
17 septembre 2006
0
Merci
merci beaucoup Christian Robert ! en effet ca fonctionne tres bien !
Commenter la réponse de bootchoz
Messages postés
88
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
17 septembre 2006
0
Merci
une autre petite question, je voudrais inserer des données dans une table provenant d'1 select qui retourne pulsieurs tuples. je bloque encore :


INSERT INTO table_virtuel (id_role) VALUES
(SELECT role.id_role FROM personne, etre_attribue, role,proposer_role, formulaire WHERE personne.id_pers=etre_attribue.id_pers AND etre_attribue.id_role=...)
vous sauriez m'aider ?
Commenter la réponse de bootchoz