Freigeben über


Cursor und Sperrungen

In Microsoft SQL Server Compact 3.5 (SQL Server Compact 3.5) unterliegt die SELECT-Anweisung in einer Cursordefinition denselben Transaktionssperrregeln, wie sie auch für andere SELECT-Anweisungen gelten. Die von einer beliebigen SELECT-Anweisung angeforderten Transaktionssperren, einschließlich der SELECT-Anweisung in einer Cursordefinition, werden von Folgendem gesteuert:

  • Der Einstellung für die Transaktionsisolationsstufe der Verbindung.
  • Allen in der FROM-Klausel angegebenen Sperrhinweisen.

Bei Basistabellen- oder Indexcursorn kann sich die Transaktionsisolationsstufe auf die angeforderten Sperren auswirken.

Wichtig

Bei der Standardisolationsstufe von READ COMMITTED fordert SQL Server Compact 3.5 beim Positionieren und Lesen von Daten keine Sperrung an. Cursor in READ COMMITTED benötigen eine Sperre vom Typ "Sch-S", um die Stabilität des Schemas zu schützen, während der Cursor geöffnet ist. Bei Datenänderungen werden exklusive Sperren aktiviert.

Sperren bleiben bis zum Ende der aktuellen Transaktion sowohl für Cursor als auch für unabhängige SELECT-Anweisungen aktiviert.

Anfordern von Sperren

Obwohl Cursor im Hinblick auf den Typ der angeforderten Transaktionssperre denselben Regeln unterliegen wie unabhängige SELECT-Anweisungen, werden die Sperren zu unterschiedlichen Zeiten angefordert. Die von einer unabhängigen SELECT-Anweisung oder von einem Cursor generierten Sperren werden immer dann angefordert, wenn eine Zeile benötigt wird. Bei einer unabhängigen SELECT-Anweisung werden alle Zeilen bei der Ausführung der Anweisung abgerufen. Cursor rufen die Zeilen zu unterschiedlichen Zeiten ab, abhängig vom Cursortyp:

  • Statische Cursor rufen das gesamte Resultset beim Öffnen des Cursors ab. Dadurch wird jede Zeile des Resultsets zum Zeitpunkt des Öffnens gesperrt.
  • Keysetgesteuerte Cursor rufen die Schlüssel der einzelnen Zeilen des Resultsets beim Öffnen des Cursors ab. Dadurch wird jede Zeile des Resultsets zum Zeitpunkt des Öffnens gesperrt.
  • Vorwärtscursor rufen Zeilen erst ab, wenn sie übertragen werden. Sperren werden für die Zeilen erst angefordert, nachdem die Cursor positioniert wurden.

Siehe auch

Konzepte

Cursortypen
Auswählen eines Cursortyps
Implizite Cursorkonvertierung
Aktualisieren keysetgesteuerter Cursor

Hilfe und Informationen

Informationsquellen (SQL Server Compact 3.5 Service Pack 1)