SQL游标

SQL游标游标(MSSQL)例子:银行取钱1000块钱方案:1ATM点击取款100010张2ATM点击取款100取10次遍历思想优点:允许你一个个的遍历缺点:效率非常的低注意:一般情况下,不要

大家好,又见面了,我是你们的朋友全栈君。

游标(MSSQL)

例子:银行取钱1000块钱

方案:1ATM点击取款1000 10张

2ATM点击取款100 取10次

遍历思想

优点:允许你一个个的遍历

缺点:效率非常的低

注意:一般情况下,不要使用游标。

 

语法:

declare cursor1(游标名) cursor for select XXX--声明游标 1
open XXXX--打开 2
fetch next from XXX into XXX--将游标值赋给XXX   3
while(@@fetch_status=0)--循环查找
fetch next from XXX into XXX--同上
close cursor1--关闭游标   4
deallocate cursor1--解散游标   5
​
fetch_status
0 FETCH 语句成功
-1 FETCH 语句失败或此行不在结果集中
-2 被提取的行不存在

eg:
alter PROCEDURE cursor_a_b_insert
@aId int,
@aName nchar(10)
AS

declare @id int
declare @name varchar(50)
declare cursor1 cursor
for --定义游标cursor1 select bid,bname from b where aid=@aId --使用游标的对象(跟据需要填入select文) open cursor1 --打开游标 fetch next from cursor1 into @id,@name --将游标向下移1行,获取的数据放入之前定义的变量@id,@name中 while @@fetch_status=0 --判断是否成功获取数据 begin update b set bname=@aName+'1' where bid=@id --进行相应处理(跟据需要填入SQL文) update a set aname=@aName where aid=@aId fetch next from cursor1 into @id,@name --将游标向下移1行 end close cursor1 --关闭游标 deallocate cursor1 exec cursor_a_b_insert 55,'王媛媛'





alter proc cursor_pr_UpUser
@NoteUserId int
as
begin transaction
declare @NLId int
declare @NPLId int
–创建用户所对应的日志游标cursorNLId,将日志id放入@NLId游标中
declare cursorNLId cursor for select NoteLogId from NoteLogs where NUId=@NoteUserId
open cursorNLId
fetch next from cursorNLId into @NLId

while @@fetch_status=0 –判断是否成功获取数据
begin
–创建日志所对应的评论游标cursorNPLId,将评论id放入@NPLId游标中
declare cursorNPLId cursor for select NotePingLunId from NotePingLun where NLId=@NLId
open cursorNPLId
fetch next from cursorNPLId into @NPLId
while @@fetch_status=0
begin
–根据评论游标@NPLId修改评论状态
update dbo.NoteReply set NoteDel=0 where NoteReplyId=@NPLId
fetch next from cursorNPLId into @NPLId
end
–当评论游标遍历完关闭
close cursorNPLId –关闭游标
deallocate cursorNPLId
–根据日志游标@NPLId修改日志状态
update dbo.NotePingLun set NoteDel=0 where NLId=@NLId
fetch next from cursorNLId into @NLId

end
–关闭日志游标
close cursorNLId –关闭游标
deallocate cursorNLId
–根据用户修改用户和日志状态
update dbo.NoteUser set NoteDel=0 where NoteuserId=@NoteUserId
update dbo.NoteLogs set NoteDel=’qq’ where NUId=@NoteUserId
if @@error<>0 –如果有错误
begin
print ‘删除失败,回滚事务’
rollback transaction –回滚
end
else
begin
print ‘删除成功,提交事务’
commit transaction
end
go


exec cursor_pr_UpUser 1

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154344.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于微信网页版WeChat不能正常登录的最佳解决方案

    关于微信网页版WeChat不能正常登录的最佳解决方案 因为出于工作和学习的目的,我的个人电脑操作系统使用的是Ubuntu18.04LTS,就目前而言,许多优秀的软件都有Linux版本,虽然Linux的用户相对群体较小,但是其软件生态也在逐渐成长,而且日常使用浏览器就可以解决许多的应用需求。现在微信和QQ在生活和工作领域均是举足轻重,emm…  BUT!!!腾讯到目前为止并没有推出Linux版的微信和TI…

    2022年5月11日
  • log4cpp 详解及使用操作「建议收藏」

    log4cpp 详解及使用操作「建议收藏」Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、文件、回滚文件、调试器、Windows日志、本地syslog和远程syslog服务器中。1、Log4cpp简介  Log4cpp是个基于LGPL的开源项目,移植自Java的日志处理跟踪项目log4j,并保持了API上的一致。…

    2022年7月13日
  • eclipse汉化教程及汉化包

    eclipse汉化教程及汉化包https://download.eclipse.org/technology/babel/update-site/R0.18.3/2021-03/

    2022年5月27日
  • 计算机运行游戏卡顿,电脑玩游戏卡怎么办几种实用解决方法

    计算机运行游戏卡顿,电脑玩游戏卡怎么办几种实用解决方法现在很多朋友都喜欢玩游戏,虽然大多数人都是用手机玩游戏了,但还是有一些比较好玩的游戏是需要电脑上玩的,而有时候我们会遇到电脑玩游戏卡的问题,这是怎么回事呢?实际上这种问题需要用排除法来确定问题的所在,从而围绕问题来解决,这里U盘网就教大家由易到难的解决方案。我们需要确定是电脑硬件慢还是系统慢,还是网络慢。一、网络导致游戏卡顿首先我们可以从游戏的卡顿表现来判断是网络问题还是系统的问题,一般来说如果是…

    2022年9月3日
  • Arm-A53资料「建议收藏」

    2012年10月Cortex-A53推出了市场,它带来了ARMv8指令集,在高能效比、节省面积基础上还有显著的性能提升。目前Cortex-A53已可以授权,ARM多个合作伙伴会在2014年推出相关芯片。开发者、OEM厂商和SoC设计者需要了解的Cortex-A53的几个重要特点如下:1、ARM低功耗/高效率的传承ARM9是ARM历史上授权最多的处理器,有超过250个授权。它树立了一个非常重要的功率/成本平衡的最有效点。基于ARM926的功能手机(Nokia…

    2022年4月13日
  • jb激活码_在线激活

    (jb激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1S…

    2022年3月27日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号