OPEN (Transact-SQL)

Öffnet einen Transact-SQL-Servercursor und füllt den Cursor auf, indem die Transact-SQL-Anweisung ausgeführt wird, die in der cursor_variable-Anweisung für DECLARE CURSOR oder SET angegeben ist.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }

Argumente

  • GLOBAL
    Gibt an, dass cursor_name auf einen globalen Cursor verweist.

  • cursor_name
    Der Name eines deklarierten Cursors. Wenn sowohl ein globaler als auch ein lokaler Cursor mit dem Namen cursor_name vorhanden sind, bezieht sich cursor_name auf den globalen Cursor, wenn GLOBAL angegeben ist. Andernfalls bezieht sich cursor_name auf den lokalen Cursor.

  • cursor_variable_name
    Der Name einer Cursorvariablen, die auf einen Cursor verweist.

Hinweise

Falls der Cursor mit der Option INSENSITIVE oder STATIC deklariert wird, erstellt OPEN eine temporäre Tabelle für das Resultset. OPEN schlägt fehl, wenn die Größe einer Zeile im Resultset die Maximalgröße für SQL Server-Tabellen überschreitet. Falls der Cursor mit der Option KEYSET deklariert wird, erstellt OPEN eine temporäre Tabelle für das Keyset. Die temporären Tabellen werden in tempdb gespeichert.

Nachdem ein Cursor geöffnet wurde, kann mit der @@CURSOR_ROWS-Funktion die Anzahl der Zeilen im letzten geöffneten Cursor erhalten werden, die der Bedingung entsprechen.

HinweisHinweis

SQL Server unterstützt nicht das asynchrone Generieren von keysetgesteuerten oder statischen Transact-SQL-Cursorn. Transact-SQL-Cursorvorgänge wie OPEN oder FETCH werden als Batch ausgeführt, sodass die asynchrone Generierung von Transact-SQL-Cursorn nicht erforderlich ist. SQL Server unterstützt weiterhin asynchrone keysetgesteuerte oder statische API (Application Programming Interface)-Servercursor für den Fall, dass eine geringe Latenzzeit von OPEN wegen Clientroundtrips bei jedem Cursorvorgang ein Problem darstellt.

Beispiele

Im folgenden Beispiel wird ein Cursor geöffnet, und es werden alle Zeilen abgerufen.

DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM AdventureWorks.HumanResources.vEmployee
WHERE LastName like 'B%';

OPEN Employee_Cursor;

FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
    FETCH NEXT FROM Employee_Cursor
END;

CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;