mysql游标 效率_SQL游标的执行效率,静态游标的高效率执行

一、简单静态游标示例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png代码

DECLAREproduct_cursorCURSORSTATICFORSELECTcNameFROMProductOPENproduct_cursorFETCHNEXTFROMproduct_cursorINTO@productWHILE@@FETCH_STATUS=0BEGINSELECT@message=''+@productPRINT@messageFETCHNEXTFROMproduct_cursorINTO@productENDCLOSEproduct_cursorDEALLOCATEproduct_cursor

二、静态游标与动态游标的区别

静态(STATIC)游标创建将由该游标使用的数据的临时复本。对游标的所有请求都从tempdb 中的这一临时表中得到应答;因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改

动态(DYNAMIC) 游标会反映在滚动游标时对结果集内的各行所做的所有数据更改。行的数据值、顺序和成员身份在每次提取时都会更改。动态游标不支持ABSOLUTE 提取选项。

FORWARD_ONLY

指定資料指標只能從第一個資料列捲到最後一個資料列。FETCH NEXT 是唯一支援的提取選項。若指定 FORWARD_ONLY 時未加上 STATIC、KEYSET 或 DYNAMIC 等關鍵字,資料指標便會作為 DYNAMIC 資料指標操作。沒有指定 FORWARD_ONLY 及 SCROLL 時,則預設為 FORWARD_ONLY,除非指定了 STATIC、KEYSET 或 DYNAMIC 關鍵字。

如果很在意游标的类型, 应该在定义游标的时候, 加上游标类型定义的关键字, 并加上TYPE_WARNING 关键字, 以便在游标类型不是预期的情况下, 收到警告信息

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png代码

--下面的演示针对 STATIC 和DYNAMIC 游标, 显示两者在游标循环期的差异[code=SQL]--定义演示数据IFOBJECT_ID('tempdb..#tb')ISNOTNULLDROPTABLE#tbCREATETABLE#tb(

idintPRIMARYKEY,

col sysname)INSERT#tb(

id, col)SELECT1,'AA'UNIONALLSELECT2,'BB'UNIONALLSELECT3,'CC'UNIONALLSELECT4,'DD'--游标测试DECLARECUR_tbCURSORLOCAL FORWARD_ONLY READ_ONLY TYPE_WARNING STATIC--DYNAMICFORSELECTid, colFROM#tb--游标打开前删除记录DELETETOP(1)FROM#tbWHEREid=4SELECT'before cursor open',*FROM#tb--打开游标OPENCUR_tb--游标打开后删除记录DELETETOP(1)FROM#tbWHEREid=3SELECT'after cursor open',*FROM#tbFETCHCUR_tbWHILE@@FETCH_STATUS=0BEGIN--游标循环中删除记录DELETETOP(1)FROM#tbWHEREid=2FETCHCUR_tbENDCLOSECUR_tbDEALLOCATECUR_tb

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值