• 浅谈游标选项 Static|Keyset|DYNAMIC|FAST_FORWARD


    接好久之前太监的一篇Blog。现在补充几个选项的介绍

    所用的语句都是这个

    IF OBJECT_ID('T1') IS NOT NULL
        DROP TABLE T1
    GO
    CREATE TABLE T1
    (
        ID INT  PRIMARY KEY,
        seq INT
    )
    
    DECLARE @seq INT=0
    WHILE @seq < 50
    BEGIN
        INSERT INTO dbo.T1
                (  ID,seq )
        VALUES  ( @seq+1,@seq)
        SET @seq=@seq+1
    END
     1 DECLARE @seq INT,@ID INT=1
     2 
     3 
     4 DECLARE CUR_Static CURSOR STATIC|DYNAMIC|KEYSET|FAST_FORWARD
     5     FOR SELECT  ID,seq FROM T1 ORDER BY ID
     6 
     7 OPEN CUR_Static 
     8 FETCH NEXT FROM CUR_Static INTO @ID,@seq
     9 WHILE @@FETCH_STATUS = 0
    10 BEGIN    
    12     PRINT @seq
    13     FETCH NEXT FROM CUR_Static INTO @ID,@seq    
    14 END
    15 CLOSE CUR_Static
    16 DEALLOCATE CUR_Static

    Static 选项

    Static选项相当于从tempdb里面完全缓存一个结果集。外部修改数据,并不影响到游标本身(修改游标结果集任意一列都不影响)。使用Static选项的话,不能执行更新游标的 Current of 操作

    PS:就是说你在执行这段代码的时候,另外一个窗口即时插入新数据,修改数据,删除数据也不会影响到当前游标

    Keyset 选项

    Keyset 选项也是从tempdb里面缓存一个结果集,只缓存一个主键。外部修改数据,不能修改主键,修改其它列是有效的。如果基表该行被删除了,@@Fetch_State返回值为-2

    PS:就是说你在执行这段代码的时候,另外一个窗口即时插入新数据没有影响。修改非主键数据可以获取到,如果数据不存在就88啦

    DYNAMIC 选项
    每次获取都即时更新,新增,修改,删除都可以支持。动态游标不支持 ABSOLUTE 提取选项
    FAST_FORWARD
    指定启用了性能优化的 FORWARD_ONLY、READ_ONLY 游标。如果指定了 SCROLL 或 FOR_UPDATE,则不能也指定 FAST_FORWARD。
  • 相关阅读:
    avalon background-image写法
    eslint 规则
    性能优化 && 用户体验
    gif
    react 生命周期
    git reset
    js 正则表达式
    大小写问题
    python中的负数取模问题(一个大坑)
    python中的__init_subclass__是什么?
  • 原文地址:https://www.cnblogs.com/Gin-23333/p/4595515.html
Copyright © 2020-2023  润新知