brug en markør
TILFØJ:[MS SQL cursor eksempel]
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, her er et eksempel på en artikel
Bemærk, at markører er langsommere end sæt-baserede operationer, men hurtigere end manuelle while-loops; flere detaljer i dette SO-spørgsmål
TILFØJ 2:hvis du skal behandle mere end blot nogle få poster, skal du først trække dem ind i en midlertidig tabel og køre markøren over den midlertidige tabel; dette vil forhindre SQL i at eskalere til tabellåse og fremskynde driften
TILFØJ 3:og selvfølgelig, hvis du kan inline, hvad end din lagrede procedure gør med hvert bruger-id og køre det hele som en enkelt SQL-opdateringssætning, ville det være optimalt