använd en markör
ADDENDUM:[MS SQL-markörexempel]
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
i MS SQL, här är en exempelartikel
notera att markörer är långsammare än set-baserade operationer, men snabbare än manuella while-loopar; mer detaljer i denna SO-fråga
TILLÄGG 2:om du kommer att bearbeta mer än bara några få poster, dra in dem i en tillfällig tabell först och kör markören över den tillfälliga tabellen; detta kommer att förhindra SQL från att eskalera till tabelllås och påskynda driften
TILLÄGG 3:och naturligtvis, om du kan infoga vad din lagrade procedur gör med varje användar-ID och köra det hela som en enda SQL-uppdateringssats, skulle det vara optimalt