まず第一に、各行を反復処理する必要があることを絶対に確認する必要があります。セットベースの操作は、私が考えることができるすべての場合に高速に実行され、通常はより単純なコードを使用します。
データによっては、SELECT
だけを使用してループできる場合があります 以下に示すステートメント:
Declare @Id int
While (Select Count(*) From ATable Where Processed = 0) > 0
Begin
Select Top 1 @Id = Id From ATable Where Processed = 0
--Do some processing here
Update ATable Set Processed = 1 Where Id = @Id
End
もう1つの方法は、一時テーブルを使用することです。
Select *
Into #Temp
From ATable
Declare @Id int
While (Select Count(*) From #Temp) > 0
Begin
Select Top 1 @Id = Id From #Temp
--Do some processing here
Delete #Temp Where Id = @Id
End
選択するオプションは、データの構造と量によって異なります。
注: SQL Serverを使用している場合は、次を使用した方がよいでしょう。
WHILE EXISTS(SELECT * FROM #Temp)
COUNT
の使用 テーブルのすべての行、EXISTS
に触れる必要があります 最初のものに触れるだけで済みます(以下のJosefの回答を参照してください)。