häufig müssen Datenbankaufgaben für jede von einer SQL -Abfrage abgerufene Zeile eine gespeicherte Prozedur ausführen. Dieser Artikel beschreibt eine Lösung mit Cursors, einem Datenbankmechanismus für die iterative Zeilenverarbeitung.
Ein Cursor fungiert als Zeiger und ermöglicht den sequentiellen Zugriff auf einen Ergebnissatz. Sie können die Abfrageergebnisse durchlaufen, Ihre gespeicherte Prozedur für jede Zeile ausführen und alle zurückgegebenen Daten oder nachfolgenden Aktionen ausführen.
Hier ist ein Beispiel mit einem Cursor in MS SQL:
<code class="language-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 the stored procedure for each row EXEC uspYourSproc @field1, @field2; FETCH NEXT FROM cur INTO @field1, @field2; END; CLOSE cur; DEALLOCATE cur;</code>
Dieser Code iteriert Zeilen in sometable
wobei someotherfield
null ist. Für jede Zeile wird uspYourSproc
mit field1
und field2
als Parameter ausgeführt.
Während Cursors eine klare und einfache Lösung bieten, kann die Leistung ein Problem sein. Cursoren sind im Allgemeinen weniger effizient als set-basierte Vorgänge, obwohl sie effizienter als manuelle WHILE
Loops.
Für große Datensätze sollten Sie zuerst die Daten in eine temporäre Tabelle laden. Das Iterieren über die temporäre Tabelle mit einem Cursor kann die Leistung erheblich verbessern, indem Tabellenverriegelungsprobleme minimiert werden.
Wenn es machbar ist, ist die Integration der Logik des gespeicherten Prozedur direkt in eine einzelne SQL UPDATE
-Anweisung der effizienteste Ansatz. Dies vermeidet den Overhead der iterativen Verarbeitung.
Das obige ist der detaillierte Inhalt vonWie kann ich eine gespeicherte Prozedur für jede von einer SQL-Abfrage zurückgegebene Zeile ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!