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.
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