sql >> Database >  >> RDS >> Sqlserver

Is er een manier om door een tabelvariabele in TSQL te lopen zonder een cursor te gebruiken?

Allereerst moet je er absoluut zeker van zijn dat je door elke rij moet itereren - op set gebaseerde bewerkingen zullen sneller werken in elk geval dat ik kan bedenken en zullen normaal gesproken eenvoudigere code gebruiken.

Afhankelijk van uw gegevens kan het mogelijk zijn om een ​​lus te maken met alleen SELECT verklaringen zoals hieronder getoond:

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

Een ander alternatief is om een ​​tijdelijke tabel te gebruiken:

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

De optie die u moet kiezen, hangt echt af van de structuur en het volume van uw gegevens.

Opmerking: Als u SQL Server gebruikt, bent u beter van dienst met:

WHILE EXISTS(SELECT * FROM #Temp)

Gebruik COUNT zal elke rij in de tabel moeten aanraken, de EXISTS hoeft alleen de eerste aan te raken (zie Josefs antwoord hieronder).



  1. Hoe automatisch migraties genereren met Sequelize CLI vanuit Sequelize-modellen?

  2. Testen van Android SQLite-database-eenheden

  3. NodeJS Postgres-fout getaddrinfo ENOTFOUND

  4. SQL Server op Linux