控制在提交事务时是否关闭游标。
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }
当 SET CURSOR_CLOSE_ON_COMMIT 为 ON 时,该设置遵从 SQL-92 标准,在提交或回滚时关闭任何打开的游标。当 SET CURSOR_CLOSE_ON_COMMIT 为 OFF 时,提交事务时不关闭游标。
当 SET CURSOR_CLOSE_ON_COMMIT 为 OFF 时,ROLLBACK 语句将只关闭打开的未完全填充的异步游标。如果回滚修改,在进行修改后打开的 STATIC 或 INSENSITIVE 游标将不再反映数据的状态。
当 SET CURSOR_CLOSE_ON_COMMIT 为 ON 时,ROLLBACK 语句关闭所有打开的游标。当 SET CURSOR_CLOSE_ON_COMMIT 为 OFF 时,ROLLBACK 语句将关闭所有打开的游标,那些被定义为 INSENSITIVE 或 STATIC 的游标除外;但未完全填充的异步 STATIC 游标将关闭。如果回滚修改,在进行修改后打开的 STATIC 或 INSENSITIVE 游标将不再反映数据的状态。
SET CURSOR_CLOSE_ON_COMMIT 控制与 sp_dboption 的 cursor close on commit 数据库选项相同的行为。如果 CURSOR_CLOSE_ON_COMMIT 设置为 ON 或 OFF,则在连接上使用该设置。如果未指定 SET CURSOR_CLOSE_ON_COMMIT,则应用 sp_dboption 的 cursor close on commit 设置。
SQL Server ODBC 驱动程序和用于 SQL Server 的 Microsoft OLE DB 提供程序均在连接时将 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 的设置是在执行或运行时设置,而不是在分析时设置。
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
相关文章