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.

Page: 1 2

ZDNet.de Redaktion

Recent Posts

Meta meldet Gewinnsprung im ersten Quartal

Der Nettoprofi wächst um 117 Prozent. Auch beim Umsatz erzielt die Facebook-Mutter ein deutliches Plus.…

5 Tagen ago

Maximieren Sie Kundenzufriedenheit mit strategischem, kundenorientiertem Marketing

Vom Standpunkt eines Verbrauchers aus betrachtet, stellt sich die Frage: Wie relevant und persönlich sind…

5 Tagen ago

Chatbot-Dienst checkt Nachrichteninhalte aus WhatsApp-Quellen

Scamio analysiert und bewertet die Gefahren und gibt Anwendern Ratschläge für den Umgang mit einer…

5 Tagen ago

Microsoft stellt kleines KI-Modell Phi-3 Mini vor

Seine Trainingsdaten umfassen 3,8 Milliarden Parameter. Laut Microsoft bietet es eine ähnliche Leistung wie OpenAIs…

5 Tagen ago

Google schließt kritische Sicherheitslücke in Chrome

Sie erlaubt eine Remotecodeausführung außerhalb der Sandbox. Betroffen sind Chrome für Windows, macOS und Linux.

5 Tagen ago

Microsoft beseitigt Fehler im März-Sicherheitsupdate für Exchange Server

Probleme treten vor allem bei Nutzern von Outlook Web Access auf. Das optionale Hotfix-Update für…

5 Tagen ago