选择合适的游标类型

news/2024/11/9 10:36:56
背景 :
定义游标的时候 , 如果不指定 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
 
 

http://www.niftyadmin.cn/n/605999.html

相关文章

final关键字的使用_java中的final关键字解析

这篇文章主要讲解Java中final关键字的使用,对于final大家从字面意思就能看出来,主要是“最终的不可改变的意思”。可以修饰类、方法和变量。先给出这篇文章的大致脉络首先,先给出final关键字的三种使用场景,也就是修饰类&#xff…

[原创]ASP.net下DataGrid的单项选择控件

function StorePage() { ddocument; td.selection?(d.selection.type!None?d.selection.createRange().text:):(d.getSelection?d.getSelection():); void(keyitwindow.open(http://www.365key.com/storeit.aspx?tescape(d.title)&uescape(d.location.href)&cescap…

mysql主从复制故障处理_MySQL主从复制及遇到问题的解决

超简单的MySQL主从复制,怎么安装MySQL数据库,这里不说了,只说它的主从复制,步骤如下:1、主从服务器分别作以下操作:1.1、版本一致1.2、初始化表,并在后台启动mysql1.3、修改root的密码2、修改主…

maven私服nexus上传第三方jar包以及下载

私服是一个特殊的远程仓库,它是架设在局域网内的仓库服务。私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构建的使用,它先从私服请求,如果私服上没有的话,则从外部的远程仓库下载&#xff0…

DataGrid模板列应用——在DataGrid中用CheckBox控制TextBox的Enabled属性

将模板列的CheckBox的AutoPostBack属性设置为true,因为在模板列中的控件没有事件,故在aspx页面写事件程序,同时将CheckBox的OnCheckedChanged事件设置为所需要的事件程序。示例如下: void Check_Change(Object sender, EventArgs …

单幅图像处理的基类

2019独角兽企业重金招聘Python工程师标准>>> <!-- lang: c# --> /// <summary> /// 计算核 /// </summary> abstract class Calc {/// <summary>/// 获取一个实例/// </summary>/// <returns></returns>public static Ca…

Python初识

Python初识 Python的注释方法简介 Python的注释方法有三种&#xff1a; 单行注释使用 #&#xff1b;多行注释使用 “”""""或者’’’’’’; 数据类型 目前了解了四种Python的数据类型&#xff1a; 整数类型&#xff08;int&#xff09; &#xff0…

python 基类是什么_确定Python类是抽象基类还是Con

我的Python应用程序包含许多抽象类和实现。例如&#xff1a;import abcimport datetimeclass MessageDisplay(object):__metaclass__ abc.ABCMetaabc.abstractpropertydef display(self, message):passclass FriendlyMessageDisplay(MessageDisplay):def greet(self):hour da…