Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy istnieje sposób na przejście przez zmienną tabeli w TSQL bez użycia kursora?

Przede wszystkim powinieneś być absolutnie pewien, że musisz iterować przez każdy wiersz — operacje oparte na zestawach będą działać szybciej w każdym przypadku, o którym myślę, i zwykle używam prostszego kodu.

W zależności od danych może być możliwe zapętlenie za pomocą tylko SELECT oświadczenia, jak pokazano poniżej:

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

Inną alternatywą jest użycie tabeli tymczasowej:

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

Opcja, którą powinieneś wybrać, naprawdę zależy od struktury i objętości Twoich danych.

Uwaga: Jeśli korzystasz z SQL Server, lepiej będzie, jeśli użyjesz:

WHILE EXISTS(SELECT * FROM #Temp)

Używam COUNT będzie musiał dotknąć każdego wiersza w tabeli, EXISTS wystarczy dotknąć pierwszego (patrz odpowiedź Josefa poniżej).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zoptymalizować użycie klauzuli OR, gdy jest używana z parametrami (SQL Server 2008)

  2. Dlaczego użycie znaku podkreślenia w filtrze LIKE daje mi wszystkie wyniki?

  3. Jak utworzyć procedurę składowaną związaną ze schematem w programie SQL Server?

  4. Atomic UPSERT w SQL Server 2005

  5. Jak działa funkcja CHAR() w SQL Server (T-SQL)