Condividi tramite


SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

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.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }

Osservazioni

Quando l'opzione SET CURSOR_CLOSE_ON_COMMIT è impostata su ON, in corrispondenza del commit o del rollback tutti i cursori aperti vengono chiusi in conformità con ISO. Quando l'opzione SET CURSOR_CLOSE_ON_COMMIT è impostata su OFF, i cursori aperti non vengono chiusi in corrispondenza del commit di una transazione.

[!NOTA]

Se si imposta l'opzione SET CURSOR_CLOSE_ON_COMMIT su ON i cursori aperti non verranno chiusi in corrispondenza del rollback quando il rollback viene applicato a un savepoint_name da una istruzione SAVE TRANSACTION.

Quando l'opzione SET CURSOR_CLOSE_ON_COMMIT è impostata su OFF, in seguito all'esecuzione di un'istruzione ROLLBACK vengono chiusi solo i cursori asincroni aperti non 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.

L'opzione SET CURSOR_CLOSE_ON_COMMIT consente di controllare la stessa funzionalità dell'opzione di database CURSOR_CLOSE_ON_COMMIT. Se l'opzione CURSOR_CLOSE_ON_COMMIT è impostata su ON o OFF, l'impostazione viene applicata alla connessione. Se l'opzione SET CURSOR_CLOSE_ON_COMMIT non è stata specificata, viene applicato il valore della colonna is_cursor_close_on_commit_on nella vista del catalogo sys.databases.

Il provider Native Client OLE DB SQL Server per SQL Server e il driver Native Client ODBC SQL Server impostano entrambi l'opzione CURSOR_CLOSE_ON_COMMIT su OFF al momento della connessione. DB-Library non imposta automaticamente il valore dell'opzione CURSOR_CLOSE_ON_COMMIT.

Quando l'opzione SET ANSI_DEFAULTS è impostata su ON, l'opzione SET CURSOR_CLOSE_ON_COMMIT risulta attivata.

L'opzione SET CURSOR_CLOSE_ON_COMMIT viene impostata in fase di esecuzione, non in fase di analisi.

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)
INSERT INTO t1 
VALUES (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