Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database 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)