选择合适的游标类型

原创 2007年05月12日 17:27:00

背景:

定义游标的时候, 如果不指定STATIC 关键字的时候, 则默认定义的游标是动态(DYNAMIC)

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

因为动态游标会消耗资源去检查基础表的更新, 所以对于复杂的查询, 且不需要反映基础表更新情况的游标处理中, 将游标定义为静态的。另外,还有一种 KEYSET 类型的游标,它的行为介于动态和静态游标之间。

 

在笔者遇到的一个案例中, 使用动态游标的处理会花费分钟, 而改为静态游标后, 处理时间只需要1 秒钟, 效率的差异非常明显

 

另外, 在使用 DYNAMIC 游标的时候, 必须注意“行的数据值、顺序和成员身份在每次提取时都会更改”的问题。

下面是一个看似正常, 但实际执行会造成死循环的示例

SET NOCOUNT ON

-- 建立测试环境

DECLARE @tb TABLE(

    id int

        PRIMARY KEY)

INSERT @tb(

    id)

SELECT id = 1 UNION ALL

SELECT id = 2

 

-- 游标处理

DECLARE tb CURSOR LOCAL FAST_FORWARD

FOR

SELECT id FROM @tb

DECLARE @id int

OPEN tb

FETCH tb INTO @id

WHILE @@FETCH_STATUS = 0

BEGIN

    PRINT @id

    UPDATE @tb SET

        id = id + 2

    WHERE id = @id

    FETCH tb INTO @id

END

CLOSE tb

DEALLOCATE tb

 

SQL Server 2014 索引和游标

主讲内容: 第一讲 课程简介 第二讲 索引简介 第三讲 创建索引 第四讲 查看索引 第五讲 索引管理 第六讲 全文索引 等课程
  • 2017年01月19日 11:00

游标、游标的优点和种类(这是转的)

本章前半部分提供了在MS SQL SERVER 中应用游标所应具有的有关游标的必要知识和各种语法。从中读者可以了解游标的优点、种类、作用、学会如何定义、打开、存取、关闭、释放游标以及游标的应用。除此之...
  • cly2004
  • cly2004
  • 2005-03-29 09:44:00
  • 2704

ADO游标类型和锁类型使用参考

ADO游标类型有四种,程序中常用第二种AdOpenKeyset,AdOpenForwardOnly = 0  只能用MoveNext读取,并且打开的同时建立的数据库的备份,不能即时体现数据库记录状态,...
  • firstaking
  • firstaking
  • 2007-03-05 15:48:00
  • 2226

MySql中游标的定义与使用方式

创建游标 首先在MySql中创建一张数据表: CREATE TABLE IF NOT EXISTS `store` ( `id` int(11) NOT NULL AUTO_INCREMENT, ...
  • liguo9860
  • liguo9860
  • 2016-03-10 18:42:45
  • 31588

oracle动态游标之强类型游标和弱类型游标

静态游标:显式游标和隐式游标称为静态游标,因为在使用他们之前,游标的定义已经完成,不能再更改。 动态游标:游标在声明时没有设定,在打开时可以对其进行修改。分为强类型游标和弱类型游标。 ------...
  • kevin_love_it
  • kevin_love_it
  • 2017-08-31 23:24:09
  • 588

sql语法回顾:“fetch: 提取类型 last 不能与只进游标一起使用。”

declare @qk char(4) declare cqk cursor for select qkb.qkh from qkb,tgb where (qkm = '计算机学报' and q...
  • Litter_Limbo
  • Litter_Limbo
  • 2016-03-11 15:10:08
  • 2164

Oracle数据中如何使用游标

     Oracle数据中如何使用游标的方法:    create or replace    PROCEDURE proceudre_name AS    BEGIN          DECLA...
  • guilin_gavin
  • guilin_gavin
  • 2009-06-22 12:18:00
  • 735

SSRS 技巧

最近在弄SSRS,发现了三个小技巧。在此记录一下。免得以后忘了。 技巧 1. SSRS输出成EXCEL时,让两个dataset各占一个sheet, 这个简单,在其中一个table的属性加上pag...
  • qq410025453
  • qq410025453
  • 2014-01-06 18:44:29
  • 483

oracle sql developer 查看游标结果集(3.0.04

http://space.itpub.net/23065269/viewspace-714035 以前在oracle sql developer里,要查看存储过程的结果集,只能是通过写个函数来查...
  • caolaosanahnu
  • caolaosanahnu
  • 2012-07-19 12:00:00
  • 556

选择合适的游标类型

背景:定义游标的时候, 如果不指定STATIC 关键字的时候, 则默认定义的游标是动态(DYNAMIC) 的动态(DYNAMIC) 游标会反映在滚动游标时对结果集内的各行所做的所有数据更改。行的数据值...
  • nbc_prc
  • nbc_prc
  • 2007-10-19 16:14:00
  • 288
收藏助手
不良信息举报
您举报文章:选择合适的游标类型
举报原因:
原因补充:

(最多只允许输入30个字)