SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)
控制 Transact-SQL COMMIT TRANSACTION 陳述式的行為。這項設定的預設值是 OFF。這表示當您認可交易時,伺服器不會關閉資料指標。
語法
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