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.
Neueste Kommentare
Noch keine Kommentare zu Verarbeitung mehrerer Datenbankeinträge mit SQL Server-Cursor
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.