sql >> Base de Datos >  >> RDS >> Sqlserver

¿Hay alguna forma de recorrer una variable de tabla en TSQL sin usar un cursor?

En primer lugar, debe estar absolutamente seguro de que necesita iterar a través de cada fila:las operaciones basadas en conjuntos funcionarán más rápido en todos los casos que se me ocurran y normalmente usarán un código más simple.

Dependiendo de sus datos, puede ser posible hacer un bucle usando solo SELECT declaraciones como se muestra a continuación:

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

Otra alternativa es usar una tabla temporal:

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

La opción que debe elegir realmente depende de la estructura y el volumen de sus datos.

Nota: Si está utilizando SQL Server, sería mejor que usara:

WHILE EXISTS(SELECT * FROM #Temp)

Usando COUNT tendrá que tocar cada fila de la tabla, el EXISTS solo necesita tocar el primero (vea la respuesta de Josef a continuación).