浅谈游标选项 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。

转载于:https://www.cnblogs.com/Gin-23333/p/4595515.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值