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