Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Existe uma maneira de percorrer uma variável de tabela no TSQL sem usar um cursor?


Antes de tudo, você deve ter certeza absoluta de que precisa iterar em cada linha - as operações baseadas em conjunto serão executadas mais rapidamente em todos os casos que eu puder pensar e normalmente usarão um código mais simples.

Dependendo dos seus dados, pode ser possível fazer um loop usando apenas SELECT declarações como mostrado abaixo:
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

Outra alternativa é usar uma tabela temporária:
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

A opção que você deve escolher realmente depende da estrutura e do volume de seus dados.

Observação: Se você estiver usando o SQL Server, seria melhor servido usando:
WHILE EXISTS(SELECT * FROM #Temp)

Usando COUNT terá que tocar em cada linha da tabela, o EXISTS só precisa tocar no primeiro (veja a resposta de Josef abaixo).