Преди всичко трябва да сте абсолютно сигурни, че трябва да преглеждате всеки ред — базираните на набор операции ще се изпълняват по-бързо във всеки случай, за който се сещам, и обикновено ще използва по-опростен код.
В зависимост от вашите данни може да е възможно да се направи цикъл, като се използва само 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
Друга алтернатива е да използвате временна таблица:
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
трябва само да докоснете първия (вижте отговора на Йозеф по-долу).