SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure noAzure SQL Data Warehouse noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Controlla il funzionamento dell'istruzione COMMIT TRANSACTION di Transact-SQLTransact-SQL.Controls the behavior of the Transact-SQLTransact-SQL COMMIT TRANSACTION statement. Il valore predefinito di questa impostazione è OFF,The default value for this setting is OFF. che specifica che i cursori non verranno chiusi dal server in occasione del commit di una transazione.This means that the server will not close cursors when you commit a transaction.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

RemarksRemarks

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.When SET CURSOR_CLOSE_ON_COMMIT is ON, this setting closes any open cursors on commit or rollback in compliance with 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.When SET CURSOR_CLOSE_ON_COMMIT is OFF, the cursor is not closed when a transaction is committed.

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.SET CURSOR_CLOSE_ON_COMMIT to ON will not close open cursors on rollback when the rollback is applied to a savepoint_name from a SAVE TRANSACTION statement.

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.When SET CURSOR_CLOSE_ON_COMMIT is OFF, a ROLLBACK statement closes only open asynchronous cursors that are not fully populated. 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.STATIC or INSENSITIVE cursors that were opened after modifications were made will no longer reflect the state of the data if the modifications are rolled back.

L'opzione SET CURSOR_CLOSE_ON_COMMIT consente di controllare la stessa funzionalità dell'opzione di database CURSOR_CLOSE_ON_COMMIT.SET CURSOR_CLOSE_ON_COMMIT controls the same behavior as the CURSOR_CLOSE_ON_COMMIT database option. Se l'opzione CURSOR_CLOSE_ON_COMMIT è impostata su ON o OFF, l'impostazione viene applicata alla connessione.If CURSOR_CLOSE_ON_COMMIT is set to ON or OFF, that setting is used on the connection. 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.If SET CURSOR_CLOSE_ON_COMMIT has not been specified, the value in the is_cursor_close_on_commit_on column in the sys.databases catalog view applies.

Il provider OLE DB per SQL ServerSQL ServerNative Client per SQL ServerSQL Server e il driver ODBC per SQL ServerSQL Server Native Client impostano entrambi l'opzione CURSOR_CLOSE_ON_COMMIT su OFF al momento della connessione.The SQL ServerSQL Server Native Client OLE DB Provider for SQL ServerSQL Server and the SQL ServerSQL Server Native Client ODBC driver both set CURSOR_CLOSE_ON_COMMIT to OFF when they connect. DB-Library non imposta automaticamente il valore dell'opzione CURSOR_CLOSE_ON_COMMIT.DB-Library does not automatically set the CURSOR_CLOSE_ON_COMMIT value.

Quando l'opzione SET ANSI_DEFAULTS è impostata su ON, l'opzione SET CURSOR_CLOSE_ON_COMMIT risulta abilitata.When SET ANSI_DEFAULTS is ON, SET CURSOR_CLOSE_ON_COMMIT is enabled.

L'opzione SET CURSOR_CLOSE_ON_COMMIT viene impostata in fase di esecuzione, non in fase di analisi.The setting of SET CURSOR_CLOSE_ON_COMMIT is set at execute or run time and not at parse time.

Per visualizzare l'impostazione corrente per questa impostazione, eseguire la query riportata di seguito.To view the current setting for this setting, run the following query.

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

AutorizzazioniPermissions

È richiesta l'appartenenza al ruolo public .Requires membership in the public role.

EsempiExamples

Nell'esempio seguente viene definito un cursore in una transazione e viene tentato di utilizzarlo dopo il commit della transazione.The following example defines a cursor in a transaction and attempts to use it after the transaction is committed.

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

Vedere ancheSee Also

ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
BEGIN TRANSACTION (Transact-SQL) BEGIN TRANSACTION (Transact-SQL)
CLOSE (Transact-SQL) CLOSE (Transact-SQL)
COMMIT TRANSACTION (Transact-SQL) COMMIT TRANSACTION (Transact-SQL)
ROLLBACK TRANSACTION (Transact-SQL) ROLLBACK TRANSACTION (Transact-SQL)
Istruzioni SET (Transact-SQL) SET Statements (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)SET ANSI_DEFAULTS (Transact-SQL)