utiliser un curseur
ADDENDUM :[Exemple de curseur MS SQL]
declare @field1 int
declare @field2 int
declare cur CURSOR LOCAL for
select field1, field2 from sometable where someotherfield is null
open cur
fetch next from cur into @field1, @field2
while @@FETCH_STATUS = 0 BEGIN
--execute your sproc on each row
exec uspYourSproc @field1, @field2
fetch next from cur into @field1, @field2
END
close cur
deallocate cur
dans MS SQL, voici un exemple d'article
notez que les curseurs sont plus lents que les opérations basées sur des ensembles, mais plus rapides que les boucles manuelles ; plus de détails dans cette question SO
ADDENDUM 2 :si vous traitez plus que quelques enregistrements, placez-les d'abord dans une table temporaire et placez le curseur sur la table temporaire ; cela empêchera SQL de se transformer en verrous de table et accélérera l'opération
ADDENDUM 3 :et bien sûr, si vous pouvez intégrer tout ce que votre procédure stockée fait à chaque ID utilisateur et exécuter le tout comme une seule instruction de mise à jour SQL, ce serait optimal