използвайте курсор
ДОПЪЛНЕНИЕ:[Пример за 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
в MS SQL, ето примерна статия
имайте предвид, че курсорите са по-бавни от операциите, базирани на набори, но по-бързи от ръчните while цикли; повече подробности в този въпрос SO
ДОПЪЛНЕНИЕ 2:ако ще обработвате повече от само няколко записа, първо ги издърпайте във временна таблица и пуснете курсора върху временната таблица; това ще попречи на SQL да ескалира в заключвания на таблици и ще ускори операцията
ДОПЪЛНЕНИЕ 3:и разбира се, ако можете да вградите каквото и да прави вашата съхранена процедура към всеки потребителски идентификатор и да изпълните цялото нещо като един оператор за актуализиране на SQL, това би било оптимално