OPEN (Transact-SQL)
Apre un cursore del server Transact-SQL e popola il cursore mediante l'istruzione Transact-SQL specificata nell'istruzione DECLARE CURSOR o SET cursor_variable.
Sintassi
OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }
Argomenti
GLOBAL
Specifica che l'argomento cursor_name fa riferimento a un cursore globale.cursor_name
Nome del cursore dichiarato. Se esistono sia un cursore globale che un cursore locale denominati in base a cursor_name ed è specificato l'argomento GLOBAL cursor_name fa riferimento al cursore globale. In caso contrario, cursor_name fa riferimento al cursore locale.cursor_variable_name
Nome di una variabile di cursore che fa riferimento a un cursore.
Osservazioni
Se il cursore viene dichiarato con l'opzione INSENSITIVE o STATIC, OPEN crea una tabella temporanea per il set di risultati. OPEN ha esito negativo se le dimensioni di una riga del set dei risultati supera le dimensioni massime consentite per le righe delle tabelle in SQL Server. Se il cursore viene dichiarato con l'opzione KEYSET, OPEN crea una tabella temporanea per il keyset. Le tabelle temporanee vengono archiviate in tempdb.
Dopo l'apertura di un cursore, utilizzare la funzione @@CURSOR_ROWS per ricevere il numero delle righe risultanti nell'ultimo cursore aperto.
Nota
SQL Server non supporta la generazione asincrona di cursori Transact-SQL gestiti da keyset o statici. Le operazioni sui cursori di Transact-SQL, ad esempio OPEN o FETCH, sono generalmente di tipo batch, pertanto la generazione asincrona di cursori Transact-SQL non è necessaria. I cursori API del server gestiti da keyset o statici in cui il parametro OPEN a bassa latenza rappresenta un problema per via dei round trip del client per ogni operazione sul cursore sono ancora supportati in SQL Server.
Esempi
Nell'esempio seguente viene aperto un cursore e vengono recuperate tutte le righe.
DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM AdventureWorks2008R2.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;