SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Microsoft Fabric 中的 SQL 数据库

控制 Transact-SQL COMMIT TRANSACTION 语句的行为。 此设置的默认值为 OFF。 这表示提交事务时服务器将不会关闭游标。

Transact-SQL 语法约定

语法

  
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)