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

Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL DatabaseSe aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database

Controla el comportamiento de la instrucción COMMIT TRANSACTION de Transact-SQLTransact-SQL.Controls the behavior of the Transact-SQLTransact-SQL COMMIT TRANSACTION statement. El valor predeterminado de esta configuración es OFF.The default value for this setting is OFF. Indica que el servidor no cerrará los cursores cuando se confirme una transacción.This means that the server will not close cursors when you commit a transaction.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

Nota

Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte Versiones anteriores de la documentación.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ComentariosRemarks

Si SET CURSOR_CLOSE_ON_COMMIT es ON, este valor cierra cualquier cursor abierto al confirmar o revertir de conformidad con ISO.When SET CURSOR_CLOSE_ON_COMMIT is ON, this setting closes any open cursors on commit or rollback in compliance with ISO. Si SET CURSOR_CLOSE_ON_COMMIT es OFF, no se cierra el cursor cuando se confirma una transacción.When SET CURSOR_CLOSE_ON_COMMIT is OFF, the cursor is not closed when a transaction is committed.

Nota

Si SET CURSOR_CLOSE_ON_COMMIT es ON, no se cierran los cursores abiertos al revertir si la reversión se aplica a savepoint_name desde una instrucción 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.

Si SET CURSOR_CLOSE_ON_COMMIT es OFF, la instrucción ROLLBACK cierra solo los cursores asincrónicos que no se han terminado de llenar.When SET CURSOR_CLOSE_ON_COMMIT is OFF, a ROLLBACK statement closes only open asynchronous cursors that are not fully populated. Los cursores STATIC o INSENSITIVE abiertos después de realizar modificaciones ya no reflejarán el estado de los datos si las modificaciones se revierten.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.

SET CURSOR_CLOSE_ON_COMMIT controla el mismo comportamiento que la opción de base de datos CURSOR_CLOSE_ON_COMMIT.SET CURSOR_CLOSE_ON_COMMIT controls the same behavior as the CURSOR_CLOSE_ON_COMMIT database option. Si CURSOR_CLOSE_ON_COMMIT se establece en ON u OFF, esa configuración se utiliza en la conexión.If CURSOR_CLOSE_ON_COMMIT is set to ON or OFF, that setting is used on the connection. Si no se ha especificado SET CURSOR_CLOSE_ON_COMMIT, se aplica el valor de la columna is_cursor_close_on_commit_on de la vista de catálogo 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.

Al conectarse, el proveedor OLE DB de SQL ServerSQL Server Native Client para SQL ServerSQL Server y el controlador ODBC de SQL ServerSQL Server Native Client establecen CURSOR_CLOSE_ON_COMMIT en OFF.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 no establece automáticamente el valor de CURSOR_CLOSE_ON_COMMIT.DB-Library does not automatically set the CURSOR_CLOSE_ON_COMMIT value.

Si SET ANSI_DEFAULTS es ON, se habilita SET CURSOR_CLOSE_ON_COMMIT.When SET ANSI_DEFAULTS is ON, SET CURSOR_CLOSE_ON_COMMIT is enabled.

La opción SET CURSOR_CLOSE_ON_COMMIT se establece en tiempo de ejecución, no en tiempo de análisis.The setting of SET CURSOR_CLOSE_ON_COMMIT is set at execute or run time and not at parse time.

Para ver la configuración actual de este valor, ejecute la consulta siguiente.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;  

PermisosPermissions

Debe pertenecer al rol public .Requires membership in the public role.

EjemplosExamples

En este ejemplo se define un cursor en una transacción y se intenta utilizar después de confirmar la transacción.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  

Consulte tambiénSee 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)
Instrucciones SET (Transact-SQL) SET Statements (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)SET ANSI_DEFAULTS (Transact-SQL)