Nejprve byste si měli být naprosto jisti, že musíte procházet každý řádek – operace založené na množině budou probíhat rychleji ve všech případech, které mě napadnou, a obvykle budou používat jednodušší kód.
V závislosti na vašich datech může být možné smyčku použít pouze pomocí SELECT
prohlášení, jak je uvedeno níže:
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
Další alternativou je použití dočasné tabulky:
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
Možnost, kterou byste si měli vybrat, skutečně závisí na struktuře a objemu vašich dat.
Poznámka: Pokud používáte SQL Server, bylo by lepší použít:
WHILE EXISTS(SELECT * FROM #Temp)
Pomocí COUNT
se budete muset dotknout každého jednotlivého řádku v tabulce, EXISTS
stačí se dotknout prvního (viz Josefova odpověď níže).