SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

Управляет поведением инструкции 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 OLE DB для собственного клиента SQL Server, так и драйвер ODBC собственного клиента SQL Server устанавливают параметр 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 производится во время исполнения или запуска, но не во время синтаксического анализа.

Разрешения

Необходимо членство в роли public.

Примеры

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

-- SET CURSOR_CLOSE_ON_COMMIT
-------------------------------------------------------------------------------
SET NOCOUNT ON

CREATE TABLE t1 (
   a INT
)
GO 

INSERT INTO t1 
VALUES (1)
INSERT INTO t1 
VALUES (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)