控制在提交事務時是否關閉游標。
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }
當 SET CURSOR_CLOSE_ON_COMMIT 為 ON 時,該設置遵從 SQL-92 標準,在提交或回滾時關閉任何打開的游標。當 SET CURSOR_CLOSE_ON_COMMIT 為 OFF 時,提交事務時不關閉游標。
當 SET CURSOR_CLOSE_ON_COMMIT 為 OFF 時,ROLLBACK 語句將只關閉打開的未完全填充的異步游標。如果回滾修改,在進行修改后打開的 STATIC 或 INSENSITIVE 游標將不再反映數(shù)據(jù)的狀態(tài)。
當 SET CURSOR_CLOSE_ON_COMMIT 為 ON 時,ROLLBACK 語句關閉所有打開的游標。當 SET CURSOR_CLOSE_ON_COMMIT 為 OFF 時,ROLLBACK 語句將關閉所有打開的游標,那些被定義為 INSENSITIVE 或 STATIC 的游標除外;但未完全填充的異步 STATIC 游標將關閉。如果回滾修改,在進行修改后打開的 STATIC 或 INSENSITIVE 游標將不再反映數(shù)據(jù)的狀態(tài)。
SET CURSOR_CLOSE_ON_COMMIT 控制與 sp_dboption 的 cursor close on commit 數(shù)據(jù)庫選項相同的行為。如果 CURSOR_CLOSE_ON_COMMIT 設置為 ON 或 OFF,則在連接上使用該設置。如果未指定 SET CURSOR_CLOSE_ON_COMMIT,則應用 sp_dboption 的 cursor close on commit 設置。
SQL Server ODBC 驅動程序和用于 SQL Server 的 Microsoft OLE DB 提供程序均在連接時將 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 的設置是在執(zhí)行或運行時設置,而不是在分析時設置。
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
相關文章