• 相关软件
    >SET CURSOR_CLOSE_ON_COMMIT 创建者:webmaster 更新时间:2006-02-16 15:51

    控制在提交事务时是否关闭游标。



    语法


    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 游标将不再反映数据的状态。



    当 SET CURSOR_CLOSE_ON_COMMIT 为 ON 时,ROLLBACK 语句关闭所有打开的游标。当 SET CURSOR_CLOSE_ON_COMMIT 为 OFF 时,ROLLBACK 语句将关闭所有打开的游标,那些被定义为 INSENSITIVE 或 STATIC 的游标除外;但未完全填充的异步 STATIC 游标将关闭。如果回滚修改,在进行修改后打开的 STATIC 或 INSENSITIVE 游标将不再反映数据的状态。



    SET CURSOR_CLOSE_ON_COMMIT 控制与 sp_dboptioncursor close on commit 数据库选项相同的行为。如果 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 的设置是在执行或运行时设置,而不是在分析时设置。



    权限


    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
    相关文章
    本页查看次数: