SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)
控制 Transact-SQL COMMIT TRANSACTION 语句的行为。此设置的默认值为 OFF。这表示提交事务时服务器将不会关闭游标。
语法
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,则从 SAVE TRANSACTION 语句将回滚应用于 savepoint_name 时,将不关闭为回滚打开的游标。 |
如果 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,则应用 sys.databases 目录视图中的 is_cursor_close_on_commit_on 列中的值。
SQL Server Native Client ODBC 驱动程序以及 SQL Server Native Client OLE DB Provider for 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