sql server 游标

定位到结果集中某一行

游标分类

  • 静态游标(Static):在操作游标的时候,数据发生变化,游标中数据不变。
  • 动态游标(Dynamic):在操作游标的时候,数据发生变化,游标中数据改变,默认值。
  • 键集驱动游标(Keyset):在操作游标的时候,被标识的列发生改变,游标中数据改变;其它列改变,游标中数据不变。

Member 表:

MemberId MemberAccount MemberPwd MemberNickname MemberPhone
1 liubei 123456 刘备 789877
2 guanyu 123456 关羽 789876
3 zhangfei 123456 张飞 789875
4 zhaoyun 123456 赵云 789871
5 machao 123456 马超 789872

创建指向单列的游标

declare mycur cursor scroll -- 创建游标 mycru
for select MemberAccount from Member  -- 指向单列,游标在 MemberAccount 列进行移动
  • scroll:滚动游标。如果没有 scroll,游标只能向下移动,有scroll 游标既可以向下也可以向上移动。

创建指向多列的游标

declare mycurs cursor scroll 
for select MemberAccount,MemberPwd,MemberNickname from Member  

打开游标

open mycur

提取某行数据

fectch first from mycur  -- 提取第一行,输出 liubei
fectch last from mycur  -- 提取最后一行,输出 machao
fectch absolute 2 from mycur -- 提取绝对第二行,输出 guanyu
fecth relative 2 from mycur -- 提取相对第二行,即当前行下移2行,输出 zhaoyun
fectch next from mycur  -- 下移一行,输出 machao
fectch prior from mycur  --上移一行, 输出 zhaoyun

提取游标数据存入变量,进行查询所有列信息

deacler @acc varchar(20)  -- 声明变量 @acc
fecth absolute 2 from mycur into @acc  -- 提取 guanyu 存入变量 @acc
select * from Member where MemberAccount = @cc -- 查询 @acc 所在记录

遍历游标

deacler @acc varchar(20)
-- deacler @abb varchar(20),多列的话声明多个变量
-- deacler @abb varchar(20)

fecth absolute 1 from mycur into @acc -- 将游标第一行存入变量 @acc,
-- 如果是多列,则 fecth absolute 1 from mycur into @acc,@abb,@acc,下同
while @@fecth_status = 0
    begin
        print '提取成功:' + @acc
        fectch next from mycur into @acc
    end

-- 输出结果:
提取成功:liubei
提取成功:guanyu
提取成功:zhangfei
提取成功:zhaoyun
提取成功:machao
  • @@fetch_status:0,提取成功;-1,失败;-2:不存在;

利用游标进行数据的修改和删除

fetch absolute 2 from mycur  -- 将游标定位到第二行,guanyu
update Member set MemberPwd = '222' where current of mycur  -- 修改第二行 MemberPwd 列为 222
delete from Member where current of mycur -- 删除第二行
  • current of mycur:当前游标所在位置

关闭游标

close mycur

删除游标

deallocate mycur
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • SQL SERVER 参考: 游标(Cursor)的讲解与实例 在数据库中,游标是一个十分重要的概念。游标提供了一...
    1edee8a22fc9阅读 376评论 0 0
  • 在数据比较多的情况下使用游标会造成读取数据缓慢或者运行错误建议在数据量比较大的时候少游标,或者分段查询,也可以使用...
    sttone阅读 634评论 0 1
  • SQL Server 2008 的关键特性之一是支持多用户共享同一数据库,但是,当某些用户同时对同一个数据进行修改...
    肉肉要次肉阅读 942评论 0 1
  • 查询速度慢的原因很多,常见如下几种: 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2...
    辉格食品阅读 2,420评论 0 9
  • 前言 厚积而薄发。 在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现。 游标的概念 --为了处理...
    olaH阅读 1,063评论 0 4