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

Er der en måde at gå gennem en tabelvariabel i TSQL uden at bruge en markør?

Først og fremmest skal du være helt sikker på, at du skal gentage hver række – sætbaserede operationer vil fungere hurtigere i alle de tilfælde, jeg kan komme i tanke om, og vil normalt bruge enklere kode.

Afhængigt af dine data kan det være muligt at sløjfe ved at bruge SELECT udsagn som vist nedenfor:

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

Et andet alternativ er at bruge en midlertidig tabel:

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

Den mulighed, du skal vælge, afhænger virkelig af strukturen og mængden af ​​dine data.

Bemærk: Hvis du bruger SQL Server, ville du være bedre tjent med at bruge:

WHILE EXISTS(SELECT * FROM #Temp)

Bruger COUNT bliver nødt til at trykke på hver enkelt række i tabellen, FINDER behøver kun at røre ved den første (se Josefs svar nedenfor).



  1. Erstat første forekomst af understreng i en streng i SQL

  2. MySQL brugerstyring

  3. Beregnet kolonne i EF-kode først

  4. Hvorfor fusionerede PostgreSQL brugere og grupper til roller?