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

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Controla o comportamento da instrução Transact-SQLTransact-SQL COMMIT TRANSACTION.Controls the behavior of the Transact-SQLTransact-SQL COMMIT TRANSACTION statement. O valor padrão dessa configuração é OFF.The default value for this setting is OFF. Isso significa que o servidor não fechará os cursores quando você confirmar uma transação.This means that the server will not close cursors when you commit a transaction.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

RemarksRemarks

Quando SET CURSOR_CLOSE_ON_COMMIT for ON, esta configuração fecha qualquer cursor aberto em confirmação ou reversão em conformidade com a ISO.When SET CURSOR_CLOSE_ON_COMMIT is ON, this setting closes any open cursors on commit or rollback in compliance with ISO. Quando SET CURSOR_CLOSE_ON_COMMIT for OFF, o cursor não será fechado quando uma transação estiver confirmada.When SET CURSOR_CLOSE_ON_COMMIT is OFF, the cursor is not closed when a transaction is committed.

Observação

SET CURSOR_CLOSE_ON_COMMIT como ON não fechará cursores abertos em reversão quando a reversão for aplicada a um savepoint_name de uma instrução 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 SET CURSOR_CLOSE_ON_COMMIT for OFF, uma instrução ROLLBACK fechará apenas cursores assíncronos abertos que não estejam totalmente populados.When SET CURSOR_CLOSE_ON_COMMIT is OFF, a ROLLBACK statement closes only open asynchronous cursors that are not fully populated. Cursores STATIC ou INSENSITIVE abertos depois que modificações foram feitas não refletirão o estado dos dados se as modificações forem revertidas.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 o mesmo comportamento que a opção de banco de dados a CURSOR_CLOSE_ON_COMMIT.SET CURSOR_CLOSE_ON_COMMIT controls the same behavior as the CURSOR_CLOSE_ON_COMMIT database option. Se CURSOR_CLOSE_ON_COMMIT for definido como ON ou OFF, essa configuração será usada na conexão.If CURSOR_CLOSE_ON_COMMIT is set to ON or OFF, that setting is used on the connection. Se SET CURSOR_CLOSE_ON_COMMIT não for especificado, o valor na coluna is_cursor_close_on_commit_on na exibição do catálogo sys.databases será aplicado.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.

O Provedor SQL ServerSQL Server Native Client OLE DB para SQL ServerSQL Server e o driver SQL ServerSQL Server Native Client ODBC definem CURSOR_CLOSE_ON_COMMIT como OFF na conexão.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. A biblioteca de banco de dados não define o valor de CURSOR_CLOSE_ON_COMMIT automaticamente.DB-Library does not automatically set the CURSOR_CLOSE_ON_COMMIT value.

Quando SET ANSI_DEFAULTS for ON, SET CURSOR_CLOSE_ON_COMMIT é habilitado.When SET ANSI_DEFAULTS is ON, SET CURSOR_CLOSE_ON_COMMIT is enabled.

A configuração de SET CURSOR_CLOSE_ON_COMMIT é definida no momento da execução e não no momento da análise.The setting of SET CURSOR_CLOSE_ON_COMMIT is set at execute or run time and not at parse time.

Para exibir a configuração atual dessa configuração, execute a consulta a seguir.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;  

PermissõesPermissions

Requer associação à função pública .Requires membership in the public role.

ExemplosExamples

O exemplo a seguir define um cursor em uma transação e tentativas de usá-lo depois que a transação for confirmada.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 TambémSee 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)
Instruções SET (Transact-SQL) SET Statements (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)SET ANSI_DEFAULTS (Transact-SQL)