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

Jak wykonać procedurę składowaną raz dla każdego wiersza zwróconego przez zapytanie?

użyj kursora

DODATEK:[przykład kursora MS SQL]

declare @field1 int
declare @field2 int
declare cur CURSOR LOCAL for
    select field1, field2 from sometable where someotherfield is null

open cur

fetch next from cur into @field1, @field2

while @@FETCH_STATUS = 0 BEGIN

    --execute your sproc on each row
    exec uspYourSproc @field1, @field2

    fetch next from cur into @field1, @field2
END

close cur
deallocate cur

w MS SQL, oto przykładowy artykuł

zauważ, że kursory są wolniejsze niż operacje oparte na zbiorach, ale szybsze niż ręczne pętle while; więcej szczegółów w tym pytaniu SO

DODATEK 2:jeśli będziesz przetwarzać więcej niż tylko kilka rekordów, najpierw przeciągnij je do tabeli tymczasowej i przesuń kursor nad tabelą tymczasową; zapobiegnie to eskalacji SQL do blokad tabeli i przyspieszy działanie

DODATEK 3:i oczywiście, jeśli możesz wbudować to, co robi twoja procedura składowana, do każdego identyfikatora użytkownika i uruchomić całość jako pojedynczą instrukcję aktualizacji SQL, byłoby to optymalne



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego EF generuje zapytania SQL z niepotrzebnymi kontrolami wartości null?

  2. Jak podzielić wartości z jednej kolumny na wartości z wielu kolumn?

  3. Przełączanie partycji w SQL Server (T-SQL)

  4. Jak włączyć CDC w zestawie tabel LUB włączyć we wszystkich tabelach w bazie danych w programie SQL Server — samouczek dotyczący programu SQL Server

  5. Zainstaluj Azure Data Studio na Ubuntu 18.04