Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Има ли начин да преминете през променлива на таблица в TSQL, без да използвате курсор?

Преди всичко трябва да сте абсолютно сигурни, че трябва да преглеждате всеки ред — базираните на набор операции ще се изпълняват по-бързо във всеки случай, за който се сещам, и обикновено ще използва по-опростен код.

В зависимост от вашите данни може да е възможно да се направи цикъл, като се използва само SELECT изявления, както е показано по-долу:

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

Друга алтернатива е да използвате временна таблица:

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

Опцията, която трябва да изберете, наистина зависи от структурата и обема на вашите данни.

Забележка: Ако използвате SQL Server, ще ви бъде по-добре да използвате:

WHILE EXISTS(SELECT * FROM #Temp)

Използване на COUNT ще трябва да докосне всеки един ред в таблицата, EXISTS трябва само да докоснете първия (вижте отговора на Йозеф по-долу).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SMALLDATETIMEFROMPARTS() Примери в SQL Server (T-SQL)

  2. Изгледи в SQL Server

  3. SQL Server 2016 – Въведение в Stretch база данни

  4. Най-ефективният начин на T-SQL да добавите varchar отляво до определена дължина?

  5. Влизания в SQL сървър между домейни с помощта на удостоверяване на Windows