OPEN (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

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

Transact-SQL-Syntaxkonventionen

Syntax

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

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

cursor_name
Der Name eines deklarierten Cursors. Falls sowohl ein lokaler als auch ein globaler Cursor namens cursor_name vorhanden ist, bezieht sich cursor_name nur dann 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 abgerufen werden, die der Bedingung entsprechen.

Hinweis

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 AP -Servercursor (Application Programming Interface), wobei Cursoroperationen des Typs „Open“ mit niedriger Latenz ein Problem darstellen. Dies ist auf Clientroundtrips zurückzuführen, die für jeden Cursorvorgang ausgeführt werden.

Beispiele

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

DECLARE Employee_Cursor CURSOR FOR  
SELECT LastName, FirstName  
FROM AdventureWorks2022.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;  

Siehe auch

CLOSE (Transact-SQL)
@@CURSOR_ROWS (Transact-SQL)
DEALLOCATE (Transact-SQL)
DECLARE CURSOR (Transact-SQL)
FETCH (Transact-SQL)