SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

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

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

Синтаксис

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

Замечания

Если параметр SET CURSOR_CLOSE_ON_COMMIT имеет значение ON, все открытые курсоры закрываются при фиксации или откате в соответствии со стандартом ISO. Если параметр SET CURSOR_CLOSE_ON_COMMIT имеет значение OFF, при фиксации транзакции курсор не закрывается.

Примечание.

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

Если SET CURSOR_CLOSE_ON_COMMIT имеет значение OFF, то инструкция ROLLBACK закрывает только открытые асинхронные курсоры, которые не были до конца заполнены. Курсоры STATIC или INSENSITIVE, открытые после того, как были произведены изменения, более не отражают текущее состояние данных, если совершен откат изменений.

SET CURSOR_CLOSE_ON_COMMIT управляет тем же самым поведением, что и параметр базы данных CURSOR_CLOSE_ON_COMMIT. Если CURSOR_CLOSE_ON_COMMIT установлен в ON или OFF, то эта установка используется при соединении. Если SET CURSOR_CLOSE_ON_COMMIT не был определен, то применяется значение столбца is_cursor_close_on_commit_on в представлении каталога sys.databases.

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

Если параметр SET ANSI_DEFAULTS имеет значение ON, включается 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)
BEGIN TRANSACTION (Transact-SQL)
CLOSE (Transact-SQL)
COMMIT TRANSACTION (Transact-SQL)
ROLLBACK TRANSACTION (Transact-SQL)
Инструкции SET (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)