Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Existe-t-il un moyen de parcourir une variable de table dans TSQL sans utiliser de curseur ?

Tout d'abord, vous devez être absolument sûr de devoir parcourir chaque ligne ; les opérations basées sur les ensembles s'exécuteront plus rapidement dans tous les cas auxquels je peux penser et utiliseront normalement un code plus simple.

En fonction de vos données, il peut être possible de boucler en utilisant simplement SELECT déclarations comme indiqué ci-dessous :

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

Une autre alternative consiste à utiliser une table temporaire :

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

L'option que vous devez choisir dépend vraiment de la structure et du volume de vos données.

Remarque : Si vous utilisez SQL Server, vous seriez mieux servi en utilisant :

WHILE EXISTS(SELECT * FROM #Temp)

Utiliser COUNT devra toucher chaque ligne du tableau, le EXISTS il suffit de toucher le premier (voir la réponse de Josef ci-dessous).