菜鸟的DBA之路[MSSQL篇] 详解游标

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-02 06:38 点击:

 

前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标。

概念

简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理。


观点

正因为游标可以将结果集一条条取出处理,所以会增加服务器的负担。再者使用游标的效率远远没有使用默认的结果集效率高,在默认结果集中,从客户端发送到服务器的唯一一个数据包是包含需执行语句的数据包。而在使用服务器游标时,每一个FETCH语句都必须从客户端发送到服务器,然后在服务器中将它解析并编译为执行计划。除非要再sqlserver上进行很复杂的数据操作。


基本知识

一. SQL Server 2005 支持两种请求游标的方法

  1.Transact-SQL (支持 SQL-92);

  2.数据库应用程序编程接口(API)游标函数(ADO、OLE DB、ODBC)应用程序不能混合使用这两种请求游标的方法。ODBC 还支持客户端游标,即在客户  端实现的游标。

二. 游标根据范围可以分成全局游标和局部游标。全局游标可以在整个会话过程中使用,局部游标只能在一个T-SQL批、存储过程或触发器中执行,当执行完毕后局部游标会自动删除。

三. 游标的基本操作,定义游标、打开游标、循环读取游标、关闭游标和删除游标。


语法基础(SQL-92)

以SQL-92方式为例

初始数据PPS_App_Infomation

\


 

 

 

 

 

01    DECLARE @Parm01 varchar(100)

02    DECLARE @Parm02 varchar(100)

03    DECLARE @Parm03 varchar(100)

04    DECLARE cur_Pay INSENSITIVE CURSOR FOR

05        SELECT GameName,CreateUser,CreateDate FROM [PicPromotion].[dbo].[PPS_App_Infomation]

06    OPEN cur_Pay

07    FETCH cur_Pay INTO @Parm01 , @Parm02 , @Parm03

08    WHILE @@FETCH_STATUS = 0

09    BEGIN

10        WAITFOR DELAY '00:00:01'

11        PRINT @Parm01+'__'+@Parm02+'__'+@Parm03

12        FETCH cur_Pay INTO @Parm01 , @Parm02 , @Parm03

13    END

14    DEALLOCATE cur_Pay

 

 

 其中 cur_Pay为游标名称 INSENSITIVE 用于设置游标是否使用副本 OPEN 打开游标 fetch循环读入游标 DEALLOCATE 删除游标

INSENSITIVE

举个简单的例子 在游标读取过程中 我们将熬夜虫子改成早起虫子看看 是否添加INSENSITIVE 会是什么样的区别

\ \

前一个有INSENSITIVE 关键字使用数据副本,后一个无INSENSITIVE 是即时数据

游标的敏感性行为定义了对基行(用于建立游标)所做的更新是否对游标可见。敏感性也定义了能否通过游标进行更新。

scroll

我们再来看看scroll关键字

 

 

 

 

01    DECLARE @Parm01 varchar(100)

02    DECLARE @Parm02 varchar(100)

03    DECLARE @Parm03 varchar(100)

04    DECLARE cur_Pay INSENSITIVE SCROLL CURSOR FOR

05        SELECT GameName,CreateUser,CreateDate FRO

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • sql常见面试题
    • SQL SERVER 2005性能之跟踪
    • SQL编程(一)
    • LINUX上RMAN自动备份脚本
    • sql server面试题
    • 如何将多个SQL查询统计结果一次显示出来
    • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
    • SQL小技巧系列 --- 行转列合并
    • sql server 列转行
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1