适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Microsoft Fabric 中的 SQL 数据库
控制 Transact-SQL COMMIT TRANSACTION 语句的行为。 此设置的默认值为 OFF。 这表示提交事务时服务器将不会关闭游标。
语法
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }
备注
当 SET CURSOR_CLOSE_ON_COMMIT 开启时,该设置会关闭提交或回滚时的所有开启光标,符合 ISO 标准。 当 SET CURSOR_CLOSE_ON_COMMIT 关闭时,交易提交时光标不会关闭。
注意
SET CURSOR_CLOSE_ON_COMMIT 当回滚应用于SAVE TRANSACTION 语句中的savepoint_name时,TO ON不会关闭打开光标。
当 关闭时 SET CURSOR_CLOSE_ON_COMMIT ,ROLLBACK 语句只关闭未完全填充的未完全填充的异步光标。 如果回滚了修改,则在修改之后打开的 STATIC 或 INSENSITIVE 游标将不再反映数据的状态。
SET 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 原生客户端 OLE DB Provider for SQL Server 和 SQL Server 原生客户端 ODBC 驱动连接时都设置为CURSOR_CLOSE_ON_COMMIT关闭。 DB-Library 不会自动设定 CURSOR_CLOSE_ON_COMMIT 该数值。
启用启用时间SETSET ANSI_DEFAULTS。 SETSET 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;
权限
要求 公共 角色具有成员身份。
示例
以下示例将在事务中定义一个游标,并尝试在提交事务后使用该游标。
-- 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)
关闭(Transact-SQL)
COMMIT TRANSACTION (Transact-SQL)
回滚事务(Transact-SQL)
SET 语句(Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)