SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

控制 Transact-SQL COMMIT TRANSACTION 陳述式的行為。這項設定的預設值是 OFF。這表示當您認可交易時,伺服器不會關閉資料指標。

主題連結圖示Transact-SQL 語法慣例

語法

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 或非感應式資料指標將不再反映資料的狀態。

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 的 SQL Server Native Client OLE DB 提供者和 SQL Server Native Client ODBC 驅動程式在連接時,都會將 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