server_游标

应用场景痛点

场景类型 技术痛点 游标解决方案 代码特征关键词
分页查询 万级数据全量加载卡顿 流水线逐行读取+内存常驻 OFFSET FETCH @@FETCH_STATUS
批量更新 条件计算依赖前序结果 状态跟踪+即时更新 WHERE CURRENT OF
树形结构遍历 层级关系SQL难以表达 递归回溯+路径拼接 WHILE循环+父节点查询
复杂数据转换 原始日志解析困难 逐行解析+结构化存储 SUBSTRING PARSE
事务分阶段处理 原子性操作难以保证 阶段标记+状态控制 BEGIN TRANSACTION COMMIT
image.png
MemberId MemberAccount MemberPwd MemberNickname MemberPhone
1 liubei 123456 刘备 4659874564
2 guanyu 123456 关羽 42354234124
3 zhangfei 123456 张飞 41253445
4 zhangyun 123456 赵云 75675676547
5 machao 123456 马超 532523523

创建游标 打开游标 使用游标 关闭游标 删除游标

declare mycur cursor scroll
scroll 滚动游标,可以向上向下滚动
如果没有只能向上滚动
声明游标for关键字

-- 创建游标
declare mycur cursor scroll
for select Memberaccount from member 
-- 打开游标
open mycur
-- 提取某行数据
fetch first from mycur
fetch last from mycur
--提取指定行数据
fetch absolute 2 from mycur
-- 当前行下移行 偏移用法
fetch relative 2 from mycur
-- 下一个 上一个
fetch next from mycur
fetch prior from mycur
-- 提取游标数据存变量,并查询
declare @acc varchar(20)
fetch absolute 2 from mycur into @acc
select * from MEMBER where MemberAccount= @acc

-- 遍历游标
declare @acc varchar(20)
fetch absolute 1 from mycur into @acc
--@@fetch_status 0 提取成功 -1 提取失败 -2提取内容不存在
while @@fetch_status = 0
begin
    print '提取' + @acc
    fetch next from mycur into @acc
end

-- 利用游标进行数据修改删除
select * from member
fetch absolute 2 from mycur
update MEMBER set MemberPwd='654321'  where current of mycur
fetch absolute 2 from mycur
delete from MEMBER   where current of mycur

-- 游标指向结果集多列

--关闭游标
close mycur
-- 删除游标
deallocate mycur
image.png
-- 游标指向结果集多列
select * from member
declare mycur cursor scroll
for select Memberaccount,MemberPwd,MemberNickname from member

open mycur

-- 遍历游标
declare @acc varchar(20)
declare @pwd varchar(20)
declare @nickname varchar(20)
fetch absolute 1 from mycur into @acc,@pwd,@nickname
--@@fetch_status 0 提取成功 -1 提取失败 -2提取内容不存在
while @@fetch_status = 0
begin
    print '提取' + @acc+@pwd+@nickname
    fetch next from mycur into @acc
end
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 定位到结果集中某一行 游标分类 静态游标(Static):在操作游标的时候,数据发生变化,游标中数据不变。 动态游...
    Vergil_wj阅读 370评论 0 0
  • SQL Server 2008 的关键特性之一是支持多用户共享同一数据库,但是,当某些用户同时对同一个数据进行修改...
    肉肉要次肉阅读 942评论 0 1
  • 游标概念 由select语句返回的结果集包括满足该语句的where子句中条件的所有行。但是有时候应用程序并不总能将...
    不知名的蛋挞阅读 2,083评论 0 6
  • 1 游标 SQL检索操作返回一组称为结果集的行。这组返回的行都是与SQL语句相匹配的行(零行或多行)。有时,需要在...
    Love零O阅读 1,225评论 0 2
  • 游标游标就像您打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件 注:不像多数 DBMS,M...
    一眼万年的星空阅读 1,444评论 0 1