カーソルを使用する
補遺:[MSSQLカーソルの例]
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:もちろん、ストアドプロシージャが各ユーザーIDに対して実行していることをすべてインライン化し、すべてを単一のSQL更新ステートメントとして実行できる場合は、それが最適です