SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

Применимо к:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureБаза данных SQL в Microsoft Fabric

Управляет поведением инструкции Transact-SQL COMMIT TRANSACTION. Значение этого параметра по умолчанию равно OFF. Это означает, что сервер не закроет курсоры при подтверждении транзакции.

Соглашения о синтаксисе Transact-SQL

Синтаксис

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

Замечания

Когда SET CURSOR_CLOSE_ON_COMMIT ВКЛЮЧЕНО, эта настройка закрывает любые открытые курсоры при фиксации или откате в соответствии с ISO. Когда SET CURSOR_CLOSE_ON_COMMIT ВЫКЛЮЧЕН, курсор не закрывается при совершении транзакции.

Примечание.

SET CURSOR_CLOSE_ON_COMMIT в ON не закрывает открытые курсоры при откате, когда откат применяется к savepoint_name из выписки SAVE TRANSACTION.

Когда SET CURSOR_CLOSE_ON_COMMIT ВЫКЛЮЧЕНО, оператор ROLLBACK закрывает только асинхронные курсоры, которые не полностью заполнены. Курсоры STATIC или INSENSITIVE, открытые после того, как были произведены изменения, более не отражают текущее состояние данных, если совершен откат изменений.

SET SET CURSOR_CLOSE_ON_COMMIT управляет тем же поведением, что и CURSOR_CLOSE_ON_COMMIT опция базы данных. Если CURSOR_CLOSE_ON_COMMIT установлено на ВКЛЮЧЕНО или ВЫКЛЮЧЕНО, эта настройка используется на соединении. Если SET CURSOR_CLOSE_ON_COMMIT не указано, применяется значение в столбце is_cursor_close_on_commit_on в каталоге sys.databases .

Нативный клиентский OLE DB Provider для SQL Server и SQL Server Native Client ODBC драйвер SQL Server оба настроены CURSOR_CLOSE_ON_COMMIT на OFF при подключении. DB-Library не устанавливает это значение автоматически CURSOR_CLOSE_ON_COMMIT .

При SETвключении включено значение ONSET ANSI_DEFAULTSSET.SET CURSOR_CLOSE_ON_COMMIT

Параметр SET CURSOR_CLOSE_ON_COMMIT устанавливается во время выполнения или выполнения, а не во время синтаксического анализа.

Чтобы просмотреть текущее значение для этого параметра, выполните следующий запрос.

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

Разрешения

Необходимо быть членом роли public.

Примеры

Следующий пример определяет курсор в транзакции и пытается использовать его после того, как транзакция зафиксирована.

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

См. также

ALTER DATABASE (Transact-SQL)
НАЧАЛО ТРАНЗАКЦИИ (Transact-SQL)
CLOSE (Transact-SQL)
ЗАВЕРШЕНИЕ ТРАНЗАКЦИИ (Transact-SQL)
ТРАНЗАКЦИЯ ОТКАТА (Transact-SQL)
SET Операторы (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)