sql server 中游标的使用方法(创建、打开、读取、关闭、删除)

  次阅读 作者:智能小宝 来源:互联网 2016-01-27 15:51 我要评论(0)

一、遇到的问题

实际上,也不算什么太大的问题O( _ )O:我们有时候可能希望在批处理或者存储过程中直接对select结果集进行加工 ,这个时候,我们需要一种能够让我们逐条处理每一行记录 的数据库对象。

二、游标的概念

解决上面的问题,我们可以使用一种叫做 游标 的数据库对象。

游标(Cursor) 可以看做一种数据类型,它可以用来遍历结果集,相当于指针,或者是数组中的下标。它处理结果集的方法有以下几种:

定位到结果集的某一行

从当前结果集的位置搜索一行或一部分行

对结果集中的当前行进行数据修改

三、游标的使用方法(创建、打开、读娶关闭、删除)

【创建游标】

和定义各种数据类型的方法有点像,但是注意,不要加 @ (实际上也有 游标类型的变量 ,和 游标 的用法几乎完全相同,而且定义时使用@符 号)。下面是定义游标的语句:

declare 游标名 cursor [local|global] [forward_only|scroll]

for

select查询语句

游标分为局部游标和全局游标两种,local表示局部游标,global表示全局游标(默认值,可以省略)。当指定 forward_only(默认值,可以省略)时,游标是只进的,也就是说只能从头到尾地提取记录,如果需要在行之间来回跳跃,需要指定为scroll。

【使用游标】

只创建游标但是不使用它,就没有任何意义了。下面我们先举个最简单的例子来演示创建好游标之后的几步使用过程:

--【创建游标】

declare C1 cursor for select xingming from yiren

declare @xingming varchar(20)

--【打开游标】

open C1

--【读取游标】

fetch next from C1 into @xingming --while的特点就是要先写一次

while(@@FETCH_STATUS=0)

begin

print '姓名:'+@xingming

fetch next from C1 into @xingming

end

--【关闭游标】

close C1

--【删除游标】

deallocate C1

游标的使用方法是不是和Java中的 whle(rs.next()){}很像呢?实际上rs.next()执行时就直接在结果集中向后移动一条了,如果没有到达结果集的末端,仍然会执行循环 体。在这里使用游标也是一样,@@FETCH_STATUS的值为0时,游标尚未走到结尾。当它不为0了,游标就走到了结尾,将退出循环。

fetch next from 游标名 into 变量名列表 是一种固定形式的读取游标内容的方法。当查询语句选择了多个字段的时候,读取时也需要借助这句话向多个变量赋值。于是写成变量名列表。

【全局游标和scroll游标】

前面提到全局游标和scroll游标,下面举个例子:

if(CURSOR_STATUS('global','CURSOR_2')!=-3) deallocate CURSOR_2

declare CURSOR_2 cursor scroll --全局的scroll游标

for select xingming,nicheng,xingbie from yiren

--第一个T-SQL批开始

open CURSOR_2

declare @seq int,

@xingming varchar(20),@nicheng varchar(50),@xingbie nchar

set @seq=4

fetch absolute @seq from CURSOR_2 into @xingming,@nicheng,@xingbie

if(@@FETCH_STATUS=0)

begin

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...