Verarbeitung mehrerer Datenbankeinträge mit SQL Server-Cursor

Zwei globale Variablen sind für die Benutzung von Cursors wichtig, und zwar:

  • @@CURSOR_ROWS – Die Anzahl der Zeilen im Cursor
  • @@FETCH_STATUS – Boolescher Wert, der das Gelingen oder Fehlschlagen des jeweils letzten Auslesevorgangs signalisiert

Diese beiden Variablen sind für den Zugriff auf Zeilen innerhalb der Ergebnismenge eines Cursor recht praktisch. An dieser Stelle soll ein Beispiel die Verwendung von Cursors verdeutlichen.

Cursors in Aktion

Das Beispiel aus Listing A benutzt einen Cursor innerhalb einer gespeicherten Prozedur. Diese akzeptiert eine userID (d. h. einen Schlüsselwert für eine Benutzertabelle), eine bookID zur Abfrage sowie die zur Abfrage erforderlichen Start- und End-Zeitpunkte. Die Prozedur sucht das Buch für den Benutzer, sofern es verfügbar ist.

Der Code enthält zwar Kommentare, doch ist die Verwendung der globalen Variable @@FETCH_STATUS mit der WHILE-Schleife vielleicht nicht ganz einfach. Auf diese Weise kann die Ausführung weitergehen, bis die Inhalte des Cursors erschöpft sind. Eine Fetch-Anweisung wird vor dem Start der WHILE-Schleife aufgerufen und kommt außerdem am Ende der WHILE-Schleife wieder zum Einsatz.

Dieses Beispiel deckt zwar nicht alle Aspekte der Verwendung von Cursors ab, aber es bietet einen Einblick in deren Benutzung und Kodierung. In der SQL Server-Dokumentation finden sich weitere Informationen zur Entwicklung eigener Cursors.

Dieser Code ließe sich problemlos auch mit Sprachen wie VB mit ADO oder VB.NET/C# mit ADO.NET programmieren. Ein Datensatz könnte aus der Datenbank ausgegeben und mithilfe eines ähnlichen Verfahrens bearbeitet werden.

Die Verwendung von Cursors

Es empfiehlt sich, Cursors sparsam und nur wenn es keine andere Alternative gibt einzusetzen. Die im Beispiel geschilderte Situation stellt eine solche Ausgangslage dar, doch lassen sich ohne Probleme noch weitere finden. Zwei Ratschläge hierzu: Ein Schlüsselsatz und statische Cursors sind zu vermeiden, da hierbei temporäre Tabellen zur Speicherung der zugrunde liegenden Schlüsselwerte erstellt werden. Außerdem kann das Aktualisieren großer Datenvolumen mit einem Cursor Probleme hinsichtlich der Verarbeitungsdauer für die Einträge aufwerfen, wobei auch Locking-Probleme entstehen können.

Themenseiten: Big Data, Datenbank, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Verarbeitung mehrerer Datenbankeinträge mit SQL Server-Cursor

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *