Condividi tramite


OPEN (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure

Apre un cursore server Transact-SQL e popola il cursore mediante l'istruzione Transact-SQL specificata nell'istruzione DECLARE CURSOR o SET cursor_variable.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }  

Argomenti

GLOBAL
Specifica che cursor_name fa riferimento a un cursore globale.

cursor_name
Nome del cursore dichiarato. Se esistono sia un cursore globale che un cursore locale con il nome cursor_name, cursor_name fa riferimento al cursore globale se viene specificato l'argomento GLOBAL. 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 di 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, usare la funzione @@CURSOR_ROWS per ricevere il numero di righe qualificate nell'ultimo cursore aperto.

Nota

SQL Server non supporta la generazione asincrona di cursori Transact-SQL gestiti da keyset o statici. Le operazioni del cursore Transact-SQL, ad esempio OPEN o FETCH, vengono eseguite in batch. Non è quindi necessario generare i cursori in modo asincrono. SQL Server supporta ancora i cursori API del server statici o gestiti da keyset asincroni nei casi in cui l'istruzione OPEN a bassa latenza costituisce un problema, a causa dei round trip del client per ogni 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 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;  

Vedi anche

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