Trước hết, bạn nên chắc chắn rằng bạn cần phải lặp lại qua từng hàng - các hoạt động dựa trên tập hợp sẽ hoạt động nhanh hơn trong mọi trường hợp mà tôi có thể nghĩ đến và thường sẽ sử dụng mã đơn giản hơn.
Tùy thuộc vào dữ liệu của bạn, có thể lặp lại chỉ bằng cách sử dụng SELECT
các câu lệnh như được hiển thị bên dưới:
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
Một giải pháp thay thế khác là sử dụng bảng tạm thời:
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
Tùy chọn bạn nên chọn thực sự phụ thuộc vào cấu trúc và khối lượng dữ liệu của bạn.
Lưu ý: Nếu bạn đang sử dụng SQL Server, bạn sẽ được phục vụ tốt hơn bằng cách sử dụng:
WHILE EXISTS(SELECT * FROM #Temp)
Sử dụng COUNT
sẽ phải chạm vào từng hàng trong bảng, EXISTS
chỉ cần chạm vào cái đầu tiên (xem câu trả lời của Josef bên dưới).