Verarbeitung mehrerer Datenbankeinträge mit SQL Server-Cursor

Einer der Lichtblicke bei der Anwendungsentwicklung ist die Tatsache, dass es meist mehrere Möglichkeiten zur Bewältigung einer Aufgabe gibt. Beispielsweise kann man beim Umgang mit Datenbanksystemen clientbasierten Code zur Verarbeitung der Daten verwenden oder mithilfe gespeicherter Prozeduren die Verarbeitung auf den Datenbankserver verlegen.

SQL Server kompiliert gespeicherte Prozeduren, so dass sie möglichst effizient ausgeführt werden. Natürlich können die gespeicherten Prozeduren zur Durchführung der Datenauswahl aus einer Untereinheit von Datenbankeinträgen eingesetzt werden, doch lassen sie sich genauso gut auch zur Verarbeitung der einzelnen Einträge der Ergebnismenge benutzen. Dabei kommen Cursors ins Spiel.

Cursor-Syntax

Ein Cursor ist eine Methode, um auf die einzelnen Zeilen in einer Tabelle oder einer Ergebnismenge zugreifen zu können. Dabei wird jeweils auf eine Zeile zugegriffen. Der Zugriff auf einzelne Zeilen über einen Cursor entspricht der Verwendung einer Auswahl-Anweisung, um eine bestimmte Zeile auszugeben. SQL Server übernimmt die Bestimmung der Cursor-Position in der Ergebnismenge oder Tabelle.

Vor der näheren Beschreibung der Syntax sollen zunächst einmal vier Cursor-Arten vorgestellt werden:

  • FORWARD_ONLY – Die Zeilen werden sequentiell aus der Datenquelle ausgegeben (nur in einer Richtung) und Änderungen an der zugrundeliegenden Datenquelle werden sofort angezeigt.
  • DYNAMIC – Ähnlich wie FORWARD_ONLY, allerdings fehlt die sequentielle Einschränkung. Auf die Daten kann daher in beliebiger Reihenfolge zugegriffen werden.
  • STATIC – Die Zeilen werden zum Lesezugriff ausgegeben, wobei Änderungen an der zugrundeliegenden Datenquelle nicht angezeigt werden. Die Daten sind dynamisch und können deshalb in beliebiger Reihenfolge aufgerufen werden.
  • KEYSET – Ein dynamischer Datensatz, in dem Änderungen an der zugrundeliegenden Datenquelle sofort angezeigt werden, Einfügungen jedoch nicht erkennbar sind.

Und so sieht die Cursor-Syntax aus:


DECLARE cursor_name CURSOR cursor_type
FOR select_statement
OPEN cursor_name
FETCH cursor_name
// Datensatz bearbeiten
CLOSE cursor_name
DEALLOCATE cursor_name

Die Anweisung DECLARE erstellt eine Variable für den Cursortyp. Auf den Cursortyp folgt der eigentliche Typ (z.B. forward_only, dynamic etc.). Die Anweisung FOR weist die Auswahl aus der Ergebnismenge dem Cursor zu. Der OPEN-Befehl bereitet den Cursor zur Benutzung vor – der Cursor wird geöffnet, so dass Daten aus ihm abgerufen werden können. Der FETCH-Befehl liest eine bestimmte Zeile aus dem Cursor aus. Mit dem CLOSE-Befehl wird der Cursor geschlossen und DEALLOCATE stellt seine Ressourcen wieder für das System bereit.

Page: 1 2

ZDNet.de Redaktion

Recent Posts

Taugen Kryptowährungen als Unterstützer der Energiewende?

Bankhaus Metzler und Telekom-Tochter MMS testen, inwieweit Bitcoin-Miner das deutsche Stromnetz stabilisieren könnten.

8 Stunden ago

Supercomputer-Ranking: El Capitan überholt Frontier und Aurora

Mit 1,7 Exaflops ist El Capitan nun der dritte Exascale-Supercomputer weltweit. Deutschland stellt erneut den…

12 Stunden ago

Ionos führt neue AMD-Prozessoren ein

Der deutsche Hyperscaler erweitert sein Server-Portfolio um vier Angebote mit den neuen AMD EPYC 4004…

13 Stunden ago

Lags beim Online-Gaming? DSL-Vergleich und andere Tipps schaffen Abhilfe

Beim Online-Gaming kommt es nicht nur auf das eigene Können an. Auch die technischen Voraussetzungen…

13 Stunden ago

GenKI-Fortbildung immer noch Mangelware

Fast jedes zweite Unternehmen bietet keinerlei Schulungen an. In den übrigen Betrieben profitieren oft nur…

13 Stunden ago

Netzwerk-Portfolio für das KI-Zeitalter

Huawei stellt auf der Connect Europe 2024 in Paris mit Xinghe Intelligent Network eine erweiterte…

15 Stunden ago