SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)
控制 Transact-SQL COMMIT TRANSACTION 陳述式的行為。 這項設定的預設值是 OFF。 這表示當您認可交易時,伺服器不會關閉資料指標。
適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure 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 的設定是在執行階段進行設定,而不是在剖析階段進行設定。
若要檢視此設定的目前設定,請執行下列查詢。
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
請參閱
參考
BEGIN TRANSACTION (Transact-SQL)
COMMIT TRANSACTION (Transact-SQL)