SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureDatabase SQL in Microsoft Fabric

Controlla il funzionamento dell'istruzione COMMIT TRANSACTION di Transact-SQL. Il valore predefinito di questa impostazione è OFF, che specifica che i cursori non verranno chiusi dal server in occasione del commit di una transazione.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

Osservazioni:

Quando SET CURSOR_CLOSE_ON_COMMIT è ATTIVO, questa impostazione chiude tutti i cursori aperti durante il commit o il rollback in conformità con ISO. Quando SET CURSOR_CLOSE_ON_COMMIT è OFF, il cursore non viene chiuso quando una transazione viene commessa.

Nota

SET CURSOR_CLOSE_ON_COMMIT to ON non chiuderà i cursori aperti al rollback quando il rollback viene applicato a un savepoint_name da un'istruzione SAVE TRANSACTION.

Quando SET CURSOR_CLOSE_ON_COMMIT è OFF, un'istruzione ROLLBACK chiude solo i cursori asincroni aperti che non sono completamente popolati. Nei cursori STATIC o INSENSITIVE che sono stati aperti dopo l'esecuzione delle modifiche non sarà più riportato lo stato dei dati se viene eseguito il rollback delle modifiche.

SET SET CURSOR_CLOSE_ON_COMMIT Controlla lo stesso comportamento dell'opzione CURSOR_CLOSE_ON_COMMIT database. Se CURSOR_CLOSE_ON_COMMIT è impostato su ON o OFF, quell'impostazione viene usata sulla connessione. Se SET CURSOR_CLOSE_ON_COMMIT non è stato specificato, si applica il valore nella colonna is_cursor_close_on_commit_on nella vista catalogo di sys.databases .

Il SQL Server Native Client OLE DB Provider per SQL Server e il driver ODBC di SQL Server Native Client sono entrambi impostati CURSOR_CLOSE_ON_COMMIT su OFF quando si connettono. DB-Library non imposta automaticamente il CURSOR_CLOSE_ON_COMMIT valore.

Quando SETSET ANSI_DEFAULTS è ATTIVATO, SETSET CURSOR_CLOSE_ON_COMMIT è abilitato.

L'impostazione di viene impostata in fase di SET CURSOR_CLOSE_ON_COMMIT esecuzione o in fase di esecuzione e non in fase di analisi.

Per visualizzare l'impostazione corrente per questa impostazione, eseguire la query riportata di seguito.

DECLARE @CURSOR_CLOSE VARCHAR(3) = 'OFF';  
IF ( (4 & @@OPTIONS) = 4 ) SET @CURSOR_CLOSE = 'ON';  
SELECT @CURSOR_CLOSE AS CURSOR_CLOSE_ON_COMMIT;  

Autorizzazioni

È richiesta l'appartenenza al ruolo public .

Esempi

Nell'esempio seguente viene definito un cursore in una transazione e viene tentato di utilizzarlo dopo il commit della transazione.

-- SET CURSOR_CLOSE_ON_COMMIT  
-------------------------------------------------------------------------------  
SET NOCOUNT ON;  
  
CREATE TABLE t1 (a INT);  
GO   
  
INSERT INTO t1   
VALUES (1), (2);  
GO  
  
PRINT '-- SET CURSOR_CLOSE_ON_COMMIT ON';  
GO  
SET CURSOR_CLOSE_ON_COMMIT ON;  
GO  
PRINT '-- BEGIN TRAN';  
BEGIN TRAN;  
PRINT '-- Declare and open cursor';  
DECLARE testcursor CURSOR FOR  
    SELECT a FROM t1;  
OPEN testcursor;  
PRINT '-- Commit tran';  
COMMIT TRAN;  
PRINT '-- Try to use cursor';  
FETCH NEXT FROM testcursor;  
CLOSE testcursor;  
DEALLOCATE testcursor;  
GO  
PRINT '-- SET CURSOR_CLOSE_ON_COMMIT OFF';  
GO  
SET CURSOR_CLOSE_ON_COMMIT OFF;  
GO  
PRINT '-- BEGIN TRAN';  
BEGIN TRAN;  
PRINT '-- Declare and open cursor';  
DECLARE testcursor CURSOR FOR  
    SELECT a FROM t1;  
OPEN testcursor;  
PRINT '-- Commit tran';  
COMMIT TRAN;  
PRINT '-- Try to use cursor';  
FETCH NEXT FROM testcursor;  
CLOSE testcursor;  
DEALLOCATE testcursor;  
GO  
DROP TABLE t1;  
GO  

Vedi anche

ALTER DATABASE (Transact-SQL)
INIZIO TRANSAZIONE (Transact-SQL)
CHIUDERE (Transact-SQL)
TRANSAZIONE COMMIT (Transact-SQL)
ANNULLARE TRANSAZIONE (Transact-SQL)
SET Istruzioni (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)