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.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

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 Transact-SQL, ad esempio OPEN o FETCH, vengono eseguite in batch. Non è quindi necessario generare i cursori Transact-SQL in modo asincrono. I cursori API del server statici o asincroni gestiti da keyset continuano ad essere supportati in SQL Server nei casi in cui l'istruzione OPEN a bassa latenza costituisce un problema a causa dei round trip del client per ciascuna operazione del cursore.

Esempi

Nell'esempio seguente viene aperto un cursore e vengono recuperate tutte le righe.

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;