OPEN (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance SQL-Datenbank in Microsoft Fabric
Ö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 }
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)