Transact-SQL 参考

SET CURSOR_CLOSE_ON_COMMIT

控制在提交事务时是否关闭游标。

语法

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

请参见

BEGIN TRANSACTION

CLOSE

COMMIT TRANSACTION

ROLLBACK TRANSACTION

SET

SET ANSI_DEFAULTS

设置数据库选项

sp_dboption