SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

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

Transact-SQL 語法慣例

Syntax

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

備註

當 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 Native Client OLE DB Provider for SQL Server 和 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 的設定是在執行階段進行設定,而不是在剖析階段進行設定。

若要檢視此設定的目前設定,請執行下列查詢。

DECLARE @CURSOR_CLOSE VARCHAR(3) = 'OFF';  
IF ( (4 & @@OPTIONS) = 4 ) SET @CURSOR_CLOSE = 'ON';  
SELECT @CURSOR_CLOSE AS CURSOR_CLOSE_ON_COMMIT;  

權限

需要 public 角色的成員資格。

範例

下列範例定義交易中的資料指標,且在交易認可之後,會嘗試使用它。

-- 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)
CLOSE (Transact-SQL)
COMMIT TRANSACTION (Transact-SQL)
ROLLBACK TRANSACTION (Transact-SQL)
SET 陳述式 (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)