użyj kursora
DODATEK:[przykład kursora 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
w MS SQL, oto przykładowy artykuł
zauważ, że kursory są wolniejsze niż operacje oparte na zbiorach, ale szybsze niż ręczne pętle while; więcej szczegółów w tym pytaniu SO
DODATEK 2:jeśli będziesz przetwarzać więcej niż tylko kilka rekordów, najpierw przeciągnij je do tabeli tymczasowej i przesuń kursor nad tabelą tymczasową; zapobiegnie to eskalacji SQL do blokad tabeli i przyspieszy działanie
DODATEK 3:i oczywiście, jeśli możesz wbudować to, co robi twoja procedura składowana, do każdego identyfikatora użytkownika i uruchomić całość jako pojedynczą instrukcję aktualizacji SQL, byłoby to optymalne