sql >> Databáze >  >> RDS >> Sqlserver

Existuje způsob, jak procházet proměnnou tabulky v TSQL bez použití kurzoru?

Nejprve byste si měli být naprosto jisti, že musíte procházet každý řádek – operace založené na množině budou probíhat rychleji ve všech případech, které mě napadnou, a obvykle budou používat jednodušší kód.

V závislosti na vašich datech může být možné smyčku použít pouze pomocí SELECT prohlášení, jak je uvedeno níže:

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

Další alternativou je použití dočasné tabulky:

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

Možnost, kterou byste si měli vybrat, skutečně závisí na struktuře a objemu vašich dat.

Poznámka: Pokud používáte SQL Server, bylo by lepší použít:

WHILE EXISTS(SELECT * FROM #Temp)

Pomocí COUNT se budete muset dotknout každého jednotlivého řádku v tabulce, EXISTS stačí se dotknout prvního (viz Josefova odpověď níže).



  1. Mohu vytvořit databázi pomocí PDO v PHP?

  2. MySQL MONTHNAME() z čísel

  3. Jak změnit mysql na mysqli?

  4. Jak ukončit nástroj příkazového řádku PostgreSQL:psql