Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

C'è un modo per scorrere una variabile di tabella in TSQL senza usare un cursore?

Prima di tutto dovresti essere assolutamente sicuro di dover scorrere ogni riga:le operazioni basate su set funzioneranno più velocemente in ogni caso che mi viene in mente e normalmente utilizzeranno un codice più semplice.

A seconda dei tuoi dati, potrebbe essere possibile eseguire il loop usando solo SELECT dichiarazioni come mostrato di seguito:

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

Un'altra alternativa è utilizzare una tabella temporanea:

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'opzione che dovresti scegliere dipende davvero dalla struttura e dal volume dei tuoi dati.

Nota: Se stai usando SQL Server, ti servirebbe meglio usando:

WHILE EXISTS(SELECT * FROM #Temp)

Utilizzando COUNT dovrà toccare ogni singola riga della tabella, il EXISTS basta toccare il primo (vedi sotto la risposta di Josef).