SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLBase de datos SQL en Microsoft Fabric

Controla el comportamiento de la instrucción COMMIT TRANSACTION de Transact-SQL. El valor predeterminado de esta configuración es OFF. Indica que el servidor no cerrará los cursores cuando se confirme una transacción.

Convenciones de sintaxis de Transact-SQL

Sintaxis

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

Comentarios

Cuando SET CURSOR_CLOSE_ON_COMMIT está activado, esta configuración cierra cualquier cursor abierto al confirmar o revertir conforme a ISO. Cuando SET CURSOR_CLOSE_ON_COMMIT está APAGADO, el cursor no se cierra cuando se compromete una transacción.

Nota

SET CURSOR_CLOSE_ON_COMMIT a ON no cerrará los cursores abiertos al revertir cuando se aplica el rollback a un savepoint_name de una instrucción SAVE TRANSACTION.

Cuando SET CURSOR_CLOSE_ON_COMMIT está OFF, una instrucción ROLLBACK solo cierra los cursores asíncronos abiertos que no están completamente poblados. 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.

SET SET CURSOR_CLOSE_ON_COMMIT Controla el mismo comportamiento que la CURSOR_CLOSE_ON_COMMIT opción de base de datos. Si CURSOR_CLOSE_ON_COMMIT está configurado en ON o OFF, esa configuración se usa en la conexión. Si SET CURSOR_CLOSE_ON_COMMIT no se ha especificado, se aplica el valor en la columna is_cursor_close_on_commit_on en la vista de catálogo de sys.databases .

El SQL Server Native Client OLE DB Provider para SQL Server y el controlador ODBC de SQL Server Native Client se configuran CURSOR_CLOSE_ON_COMMIT en OFF cuando se conectan. DB-Library no establece automáticamente el CURSOR_CLOSE_ON_COMMIT valor.

Cuando SETSET ANSI_DEFAULTS está activado, SETSET CURSOR_CLOSE_ON_COMMIT está habilitado.

El valor de se establece en tiempo de SET CURSOR_CLOSE_ON_COMMIT ejecución o ejecución y no en tiempo de análisis.

Para ver la configuración actual de este valor, ejecute la consulta siguiente.

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

Permisos

Debe pertenecer al rol public .

Ejemplos

En este ejemplo se define un cursor en una transacción y se intenta utilizar después de confirmar la transacción.

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

ALTER DATABASE (Transact-SQL)
INICIAR LA TRANSACCIÓN (Transact-SQL)
CIERRE (Transact-SQL)
CONFIRMAR TRANSACCIÓN (Transact-SQL)
TRANSACCIÓN DE REVERSIÓN (Transact-SQL)
SET Instrucciones (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)