Partilhar via


SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Controla o comportamento da Transact-SQL instrução COMMIT TRANSACTION. O valor padrão para esta definição é DESLIGADO. Isto significa que o servidor não fecha os cursores quando faz commit de uma transação.

Transact-SQL convenções de sintaxe

Sintaxe

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

Observações

Quando o SET CURSOR_CLOSE_ON_COMMIT está ATIVADO, esta definição fecha quaisquer cursores abertos no commit ou rollback em conformidade com o ISO. Quando o SET CURSOR_CLOSE_ON_COMMIT está DESLIGADO, o cursor não é fechado quando uma transação é confirmada.

Observação

O SET CURSOR_CLOSE_ON_COMMIT to ON não fecha os cursores abertos ao reverter quando o rollback é aplicado a um savepoint_name de uma instrução SAVE TRANSACTION.

Quando o CURSOR_CLOSE_ON_COMMIT SET está DESLIGADO, uma instrução ROLLBACK fecha apenas cursores assíncronos abertos que não estão totalmente preenchidos. Cursores ESTÁTICOS ou INSENSÍVEIS que foram abertos após modificações já não refletirão o estado dos dados se as modificações forem revertidas.

SET CURSOR_CLOSE_ON_COMMIT controla o mesmo comportamento da opção CURSOR_CLOSE_ON_COMMIT base de dados. Se CURSOR_CLOSE_ON_COMMIT estiver definido para LIGADO ou DESLIGADO, essa definição é usada na ligação. Se o CURSOR_CLOSE_ON_COMMIT SET não tiver sido especificado, aplica-se o valor na coluna is_cursor_close_on_commit_on na vista de catálogo do sys.databases .

O SQL Server Native Client OLE DB Provider para SQL Server e o driver SQL Server Native Client ODBC definem ambos CURSOR_CLOSE_ON_COMMIT como OFF quando se ligam. DB-Library não define automaticamente o valor CURSOR_CLOSE_ON_COMMIT.

Quando o SET ANSI_DEFAULTS está ATIVADO, o SET CURSOR_CLOSE_ON_COMMIT está ativado.

A definição de SET CURSOR_CLOSE_ON_COMMIT é definida em tempo de execução ou execução e não em tempo de análise sintética.

Para visualizar a definição atual desta definição, execute a seguinte consulta.

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

Permissions

Requer adesão à função pública de .

Examples

O exemplo seguinte define um cursor numa transação e tenta usá-lo depois de a transação ser confirmada.

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

Ver também

ALTERAR BASE DE DADOS (Transact-SQL)
INICIAR TRANSAÇÃO (Transact-SQL)
FECHAR (Transact-SQL)
TRANSAÇÃO COMMIT (Transact-SQL)
TRANSAÇÃO DE REVERSÃO (Transact-SQL)
Instruções SET (Transact-SQL)
CONJUNTO ANSI_DEFAULTS (Transact-SQL)