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