首页 > 语言 > 关键词 > 简介最新资讯 > 正文

SQLServer 游标简介与使用说明

2009-07-02 14:21 · 稿源:cnblogs.com

游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次以行或者多行前进或向后浏览数据的能力。我们可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理。

1.游标的组成

游标包含两个部分:一个是游标结果集、一个是游标位置。

游标结果集:定义该游标得SELECT语句返回的行的集合。游标位置:指向这个结果集某一行的当前指针。

2.游标的分类

游标共有3类:API服务器游标、Transaction-SQL游标和API客户端游标。

其中前两种游标都是运行在服务器上的,所以又叫做服务器游标。

API服务器游标

API服务器游标主要应用在服务上,当客户端的应用程序调用API游标函数时,服务器会对API函数进行处理。使用API函数和方法可以实现如下功能:

(1)打开一个连接。

(2)设置定义游标特征的特性或属性,API自动将游标影射到每个结果集。

(3)执行一个或多个Transaction-SQL语句。

(4)使用API函数或方法提取结果集中的行。

API服务器游标包含以下四种:静态游标、动态游标、只进游标、键集驱动游标(Primary key)

静态游标的完整结果集将打开游标时建立的结果集存储在临时表中,(静态游标始终是只读的)。静态游标具有以下特点:总是按照打开游标时的原样显示结果集;不反映数据库中作的任何修改,也不反映对结果集行的列值所作的更改;不显示打开游标后在数据库中新插入的行;组成结果集的行被其他用户更新,新的数据值不会显示在静态游标中;但是静态游标会显示打开游标以后从数据库中删除的行。

动态游标与静态游标相反,当滚动游标时动态游标反映结果集中的所有更改。结果集中的行数据值、顺序和成员每次提取时都会改变。

只进游标不支持滚动,它只支持游标从头到尾顺序提取数据行。注意:只进游标也反映对结果集所做的所有更改。

键集驱动游标同时具有静态游标和动态游标的特点。当打开游标时,该游标中的成员以及行的顺序是固定的,键集在游标打开时也会存储到临时工作表中,对非键集列的数据值的更改在用户游标滚动的时候可以看见,在游标打开以后对数据库中插入的行是不可见的,除非关闭重新打开游标。

Transaction-SQL游标

该游标是基于Declare Cursor 语法,主要用于Transaction-SQL脚本、存储过程以及触发器中。Transaction-SQL游标在服务器处理由客户端发送到服务器的Transaction-SQL语句。

在存储过程或触发器中使用Transaction-SQL游标的过程为:

(1)声明Transaction-SQL变量包含游标返回的数据。为每个结果集列声明一个变量。声明足够大的变量来保存列返回的值,并声明变量的类型为可从数据类型隐式转换得到的数据类型。

(2)使用Declare Cursor语句将Transaction-SQL游标与Select语句相关联。还可以利用Declare Cursor定义游标的只读、只进等特性。

(3)使用Open语句执行Select语句填充游标。

(4)使用Fetch Into语句提取单个行,并将每列中得数据移至指定的变量中。注意:其他Transaction-SQL语句可以引用那些变量来访问提取的数据值。Transaction-SQL游标不支持提取行块。

(5)使用Close语句结束游标的使用。注意:关闭游标以后,该游标还是存在,可以使用Open命令打开继续使用,只有调用Deallocate语句才会完全释放。

客户端游标

该游标将使用默认结果集把整个结果集高速缓存在客户端上,所有的游标操作都在客户端的高速缓存中进行。注意:客户端游标只支持只进和静态游标。不支持其他游标。

3.游标的生命周期

游标的生命周期包含有五个阶段:声明游标、打开游标、读取游标数据、关闭游标、释放游标。

声明游标是为游标指定获取数据时所使用的Select语句,声明游标并不会检索任何数据,它只是为游标指明了相应的Select 语句。

Declare 游标名称 Cursor 参数

声明游标的参数

(1)Local与Global:Local表示游标的作用于仅仅限于其所在的存储过程、触发器以及批处理中、执行完毕以后游标自动释放。Global表示的是该游标作用域是整个会话层。由连接执行的任何存储过程、批处理等都可以引用该游标名称,仅在断开连接时隐性释放。

(2)Forward_only与Scroll:前者表示为只进游标,后者表示为可以随意定位。默认为前者。

(3)Static、Keyset与Dynamic: 第一个表示定义一个游标,其数据存放到一个临时表内,对游标的所有请求都从临时表中应答,因此,对该游标进行提取操作时返回的数据不反映对基表所作的修改,并且该游标不允许修改。Keyset表示的是,当游标打开时,键集驱动游标中行的身份与顺序是固定的,并把其放到临时表中。Dynamic表示的是滚动游标时,动态游标反映对结果集内所有数据的更改。

(4)Read_only 、Scroll_Locks与Optimistic:第一个表示的是只读游标,第二个表示的是在使用的游标结果集数据上放置锁,当行读取到游标中然后对它们进行修改时,数据库将锁定这些行,以保证数据的一致性。Optimistic的含义是游标将数据读取以后,如果这些数据被更新了,则通过游标定位进行的更新与删除操作将不会成功。

标准游标:

Declare MyCursor Cursor

For Select * From Master_Goods

只读游标

Declare MyCusror Cursor

For Select * From Master_Goods

For Read Only

可更新游标

Declare MyCusror Cursor

For Select * From Master_Goods

For UpDate

打开游标使用Open语句用于打开Transaction-SQL服务器游标,执行Open语句的过程中就是按照Select语句进行填充数据,打开游标以后游标位置在第一行。

打开游标

全局游标:Open Global MyCursor 局部游标: Open MyCursor

读取游标数据:在打开游标以后,使用Fetch语句从Transaction-SQL服务器游标中检索特定的一行。使用Fetch操作,可以使游标移动到下一个记录,并将游标返回的每个列得数据分别赋值给声明的本地变量。

Fetch [Next | Prior | First | Last | Absolute n | Relative n ] From MyCursor

Into @GoodsID,@GoodsName

其中:Next表示返回结果集中当前行的下一行记录,如果第一次读取则返回第一行。默认的读取选项为Next

Prior表示返回结果集中当前行的前一行记录,如果第一次读取则没有行返回,并且把游标置于第一行之前。

First表示返回结果集中的第一行,并且将其作为当前行。

Last表示返回结果集中的最后一行,并且将其作为当前行。

Absolute n 如果n为正数,则返回从游标头开始的第n行,并且返回行变成新的当前行。如果n为负,则返回从游标末尾开始的第n行,并且返回行为新的当前行,如果n为0,则返回当前行。

Relative n 如果n为正数,则返回从当前行开始的第n行,如果n为负,则返回从当前行之前的第n行,如果为0,则返回当前行。

关闭游标调用的是Close语句,方式如下:Close Global MyCursor Close MyCursor

释放游标调用的是Deallocate语句,方法如下:Deallocate Glboal MyCursor Deallocate MyCursor

游标实例:

以下为引用的内容:

            Declare MyCusror Cursor Scroll

                  For Select * From Master_Goods Order By GoodsID

            Open MyCursor

            Fetch next From MyCursor
            Into @GoodsCode,@GoodsName

            While(@@Fetch_Status = 0)
                  Begin

                         Begin
                               Select @GoodsCode = Convert(Char(20),@GoodsCode)
                               Select @GoodsName = Convert(Char(20),@GoodsName)
                               PRINT @GoodsCode + ':' + @GoodsName
                         End

                         Fetch next From MyCursor
                         Into @GoodsCode,@GoodsName

                  End
            Close MyCursor
            Deallocate MyCursor

修改当前游标的数据方法如下:

UpDate Master_Goods Set GoodsName = 'yangyang8848' Where Current Of MyCursor;

删除当前游标行数据的方法如下:

Delete From Master_Goods Where Current Of MyCursor

Select @@CURSOR_ROWS 可以得到当前游标中存在的数据行数。注意:此变量为一个连接上的全局变量,因此只对应最后一次打开的游标。

原文地址:http://www.cnblogs.com/yangyang8848/archive/2009/07/02/1514593.html

  • 相关推荐
  • 大家在看
  • 云计算科普之SaaS简介:软件即服务

    SaaS,是Software-as-a-Service的缩写名称,意思为软件即服务,即通过网络提供软件服务,是在21世纪开始兴起的一种完全创新的软件应用模式。SaaS是一种通过网络提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。用户不用再购买软件,而改用向提供商租用基于Web的软件,?

  • 云计算科普之PaaS简介:平台即服务

    云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算早期,简单地说,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。因而,云计算又称为网格计算。通过这项技术,可以在很短的时间内(几秒种)完成对数以万计的数据的处理,从而达到强大的网络服务。PaaS是(Plat

  • 快手辛巴怎么火的 辛有志个人资料简介

    快手辛巴可以说得上是快手的第一网红了,辛巴当然是靠直播火起来的。如果没有直播平台,即使辛巴在电商领域或是创立品牌再成功,也难有今天的名气。在 2019 年和 2020 初,辛巴这个名字在全网的名气更加响亮了。去年是因为他办了一场「世纪型」婚礼演唱会,并且在今年疫情期间他为武汉捐出1. 5 亿元用于慈善。以下是辛巴的个人资料简介。

  • 北银消费金融公司产品简介 看本文就知道

    北银消费金融有限公司成立于 2010 年 3 月 1 日,是一家专为我国境内居民提供以消费为目的的贷款的非银行金融机构,一直在为客户打造优质消费金融环境而努力。那么北银消费金融公司涵盖了哪些产品呢?北银消费金融公司涵盖了哪些产品北银消费金融公司轻松付产品介绍:教育e付为有教育培训需求的客户提供贷款支持;申请流程为线下/线上申请→贷款审批→贷款发放。北银消费金融公司教育e付装修e付为有装修消费需求的客户提供贷款支持

  • Kionix三轴加速度传感器的高级数据路径功能简介

    1.前言本应用指南旨在帮助开发者了解罗姆集团旗下Kionix公司的KX13x系列三轴加速度传感器搭载的独有功能——高级数据路径(Advanced Data Path,ADP)。ADP由用户可定制的频率滤波器和一个均方根(RMS)计算器组成,后者是提供所需带宽内的加速度振幅。X、Y和Z轴的 16 位ADP输出可以从专用输出寄存器中读取,存储在 512 字节的FIFO缓存中,然后被路由至Wake-Up(唤醒)和Back-to-Sleep(返回睡眠)引擎。通过设置想要的阈值振幅和计数器值?

  • 哈工大百年校庆无人机表演视频全程回顾 哈工大简介

    6 月 7 日,哈尔滨工业大学迎来建校百年。上午 9 时,建校 100 周年纪念大会在主楼广场隆重举行。哈工大百年建校 100 周年纪念大通过人民日报客户端、学习强国平台、央视频、Zaker客户端、学校官方B站和官方抖音等平台同步直播。

  • 抖音生态全业务使用说明书

    从我个人的理解,对于抖音这种用算法推荐来分配流量的平台,“洗流量”这个思维其实更好。因为平台每次给你的流量其实与你过去的积累关系不大(高粉丝量会有更大的基础推荐值,但也高不了太多,多几万播放的样子),你能否获取到高额的流量主要还是看这条内容爆不爆。

  • 君哲互联简介

    君哲互联,全称青岛君哲互联网科技有限公司,成立于2016年,企业创始人电子商务专业毕业。在毕业后吸纳部分软件开发专业应届毕业生与相关技术人员组成公司,公司目前位于青岛市北区嘉定路5号青岛工业设计产业园内。君哲互联主营业务有网站设计与制作、搜索引擎营销、软文推广、新闻营销、微博微信代运营、短视频代运营、电商代运营等互联网业务。目前服务的客户涵盖教育、水利、培训、餐饮等多个领域,并获得了广泛客户的认同。作?

  • 美国加州“年度女性”——比亚迪李柯简介

    目前,比亚迪在中国市场,尤其在新能源汽车市场中的发展势头良好,在实施全球化发展战略上,比亚迪亦一路领航。其中,以比亚迪李柯为主导的欧美市场团队体系,是比亚迪海外市场拓展的重要攻关后盾。如果没有比亚迪李柯,比亚迪在美国市场的进展步伐或许就没有那么快。资料显示从 1996 年开始,李柯便加入到了比亚迪,作为品牌集团的全球业务推广负责人,在刚开始拓宽市场的时候,李柯孤身一人,当时对一个柔弱的女子而言,没有太多

  • Google Maps更新:允许用户更改名字、头像和个人简介

    11月11日据中关村在线消息,在Google Maps即将到来的版本更新中,将允许用户编辑和管理自己的公共个人信息。新版中还引入了隐私保护选项,允许用户选择显示/隐藏贡献值。如果用户选择隐藏,那么在名字下方的这个选项就不会显示。此外增加的第二个选项可让您选择不对企业显示个人资料。

  • 腾讯《王者荣耀》公布App客户端权限使用说明

    此前国家网信办发布《百款常用App申请收集使用个人信息权限情况》,规范App申请收集使用个人信息相关权限,对于加强App个人信息保护具有重要意义。近期整治App过度索取权限期间,工作组认真受理了大量网民的举报,并收到了大量关于App强制、超范围索要权限等举报信息。为让公众直观了解常用App申请收集使用个人信息权限情况,App专项治理工作组对下载量大的 100 款App申请权限以及强制开启的权限进行了分析统计,并予以公布。

  • 远智教育简介

    远智教育,成立于 2011 年,是经教育局许可、民政部门批准,集学历教育、职业教育、中职高职全日制教育、人力资源输出、在线教育平台的研发与运营为一体的综合性教育集团。远智教育LOGO远智教育成立以来一直秉承用心为教育的服务理念,利用优质的教育资源和先进的信息技术,致力于打造成人教育一站式上进学习平台与职业教育培训闭环生态圈。为中小企业、职业院校、培训机构、中小学、幼儿园、诊所/药店提供系列服务,立志成为中国?

  • SQLServer 存储过程简介与使用方法

    Sql Server的存储过程是一个被命名的存储在服务器上的Transacation-Sql语句集合,是封装重复性工作的一种方法,它支持用户声明的变量、条件执行和其他强大的编程功能。

  • SQL Server游标使用实例

    在我的T-SQL代码中,我经常使用基于集合的运算。我被告知这些运算的类型正是SQL Server设计所处理的,并且它应该比串行处理要快些。我知道游标的存在但是我不确定如何使用它们...

  • 枚举SQLServer的实例

    枚举SQLServer的实例,nstanceName|服务器实例的名称。如果服务器作为默认实例运行,则为空白

  • SQL游标原理和使用方法

    在数据库开发过程中,当你检索的数据只是一条记录时,你所编写的事务语句代码往往使用SELECT INSERT 语句。但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录。那么如何解决这种问题呢?游标为我们提供了一种极为优秀的解决方案。

  • 避免在 PL/SQL 中使用嵌套游标查询

    考虑下面的 PL/SQL 代码,这段代码生成一个 XML 格式的矩阵样式的报表..

  • 关于Adodb.Stream 的使用说明

    关于Adodb.Stream 的使用说明

  • 网易云生成你的使用说明书在哪 你的使用说明书怎么玩

    网易云生成你的使用说明书在哪?你的使用说明书怎么玩?下面跟着小编一起来看看吧!

  • 网易云音乐你的使用说明书使用方法 你的使用说明书

    1、大家将自己的网易云音乐更新到最新版本,打开软件,看到首页“独家策划”,生成你的使用说明书,点击进入;

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议

热文

  • 3 天
  • 7天