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

Microsoft nennt weitere Details zu kostenpflichtigen Patches für Windows 10

Erstmals liegen Preise für Verbraucher vor. Sie zahlen weniger als Geschäftskunden. Dafür beschränkt Microsoft den…

17 Stunden ago

Microsoft verschiebt erneut Copilot Recall

Die Entwickler arbeiten noch an weiteren „Verfeinerungen“. Windows Insider erhalten nun wohl eine erste Vorschau…

1 Tag ago

GenKI im Job: Mitarbeitende schaffen Tatsachen

Laut Bitkom-Umfrage werden in jedem dritten Unternehmen in Deutschland private KI-Zugänge genutzt. Tendenz steigend.

2 Tagen ago

97 Prozent der Großunternehmen melden Cyber-Vorfälle

2023 erlitten neun von zehn Unternehmen in der DACH-Region Umsatzverluste und Kurseinbrüche in Folge von…

2 Tagen ago

„Pacific Rim“-Report: riesiges, gegnerisches Angriffs-Ökosystem

Der Report „Pacific Rim“ von Sophos beschreibt Katz-und-Maus-Spiel aus Angriffs- und Verteidigungsoperationen mit staatlich unterstützten…

2 Tagen ago

DeepL setzt erstmals auf NVIDIA DGX SuperPOD mit DGX GB200-Systemen

NVIDIA DGX SuperPOD soll voraussichtlich Mitte 2025 in Betrieb genommen und für Forschungsberechnungen genutzt werden.

2 Tagen ago