Pertama-tama Anda harus benar-benar yakin bahwa Anda perlu mengulangi setiap baris — operasi berbasis set akan bekerja lebih cepat dalam setiap kasus yang dapat saya pikirkan dan biasanya akan menggunakan kode yang lebih sederhana.
Bergantung pada data Anda, pengulangan dapat dilakukan hanya dengan SELECT
pernyataan seperti yang ditunjukkan di bawah ini:
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
Alternatif lain adalah dengan menggunakan tabel sementara:
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
Opsi yang harus Anda pilih sangat bergantung pada struktur dan volume data Anda.
Catatan: Jika Anda menggunakan SQL Server, Anda akan lebih baik menggunakan:
WHILE EXISTS(SELECT * FROM #Temp)
Menggunakan COUNT
harus menyentuh setiap baris dalam tabel, EXISTS
hanya perlu menyentuh yang pertama (lihat jawaban Josef di bawah).