Foreach en SQL ?

Signaler
Messages postés
88
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
17 septembre 2006
-
Messages postés
88
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
17 septembre 2006
-
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...

5 réponses

Messages postés
259
Date d'inscription
mercredi 3 mai 2006
Statut
Modérateur
Dernière intervention
11 janvier 2010
3
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
Messages postés
88
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
17 septembre 2006

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.
Messages postés
259
Date d'inscription
mercredi 3 mai 2006
Statut
Modérateur
Dernière intervention
11 janvier 2010
3
Remplace = par IN alors

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
Messages postés
88
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
17 septembre 2006

merci beaucoup Christian Robert ! en effet ca fonctionne tres bien !
Messages postés
88
Date d'inscription
mardi 3 mai 2005
Statut
Membre
Dernière intervention
17 septembre 2006

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 ?