sql >> Databasteknik >  >> RDS >> Sqlserver

Finns det något sätt att gå igenom en tabellvariabel i TSQL utan att använda en markör?

Först och främst bör du vara helt säker på att du behöver iterera genom varje rad — uppsättningsbaserade operationer kommer att fungera snabbare i alla fall jag kan tänka mig och kommer normalt att använda enklare kod.

Beroende på dina data kan det vara möjligt att loopa med bara SELECT uttalanden som visas nedan:

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

Ett annat alternativ är att använda en tillfällig tabell:

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

Alternativet du bör välja beror verkligen på strukturen och volymen av dina data.

Obs! Om du använder SQL Server är det bättre att använda:

WHILE EXISTS(SELECT * FROM #Temp)

Använder COUNT måste trycka på varje enskild rad i tabellen, koden EXISTS behöver bara röra vid den första (se Josefs svar nedan).



  1. hur man anropar en lagrad proc från anther och ändrar refcursor som returneras?

  2. Skyddar mysql_real_escape_string() HELT mot SQL-injektion?

  3. Relation existerar inte

  4. MySQL Workbench