SQL游标使用——格式、实例、嵌套

SQL游标使用——格式、实例、嵌套在sql语句中,如果要实现诸如for循环一样的功能就会用到游标,但游标一定要慎用,因为它会很大的影响数据库性能。一、游标的一般格式:DECLARE游标名称CURSORFORSELECT字段1,字段2,字段3,…FROM表名WHERE…OPEN游标名称FETCHNEXTFROM游标名称INTO变量名1,变量名2,变量名3,…WHILE@@FETCH_S

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

在sql语句中,如果要实现诸如for循环一样的功能就会用到游标,但游标一定要慎用,因为使用游标对数据库性能有关很大的影响。

一、游标的一般格式:

DECLARE 游标名称 CURSOR FOR SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ...
OPEN 游标名称
FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...
WHILE @@FETCH_STATUS=0
   BEGIN
      SQL语句执行过程... ...
      FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...
    END
CLOSE 游标名称
DEALLOCATE 游标名称 (释放游标)

二、具体实例:

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

功能说明:以select * from table1 的查询结果为基本表,即要循环的表,在循环到table1的每一行时执行name=name+’1’的更新操作。

三、游标嵌套
从表SupplyInfo中查询出标签关键词Keywords(如‘安全柜,工作台,BIOBASE,,’),然后根据’,’进行分割,分割出的单个关键词插入表LB_article_tags,并将SupplyInfo与LB_article_tags的关联关系插入表 lb_article_tags_relation,实现语句如下:

create proc aa_test as declare @id int,@tags varchar(50),@add_time datetime declare cursor1 cursor for select top(10) SupplyID,Keywords,AddDate from SupplyInfo order by supplyid desc open cursor1 fetch next from cursor1 into @id,@tags,@add_time while @@fetch_status=0 begin if (@tags is not null) and (@tags!='') begin declare @value varchar(50) declare cursor2 cursor for select [Value] from [dbo].[SplitString](@tags, ',', 1) open cursor2 fetch next from cursor2 into @value while @@fetch_status=0 begin declare @tag_id int,@co int select @co=count(0) from LB_article_tags where title=@value if @co=0 begin insert into LB_article_tags(title,add_time) values(@value,@add_time) select @tag_id=@@IDENTITY insert into lb_article_tags_relation(article_id, tag_id) values(@id, @tag_id) end else if @co>0 begin select @tag_id=id from LB_article_tags where title=@value declare @count int select @count=count(0) from lb_article_tags_relation where article_id=@id and tag_id=@tag_id if @count=0 insert into lb_article_tags_relation(article_id, tag_id) values(@id, @tag_id) end fetch next from cursor2 into @value end close cursor2 deallocate cursor2 end fetch next from cursor1 into @id,@tags,@add_time end close cursor1 deallocate cursor1 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年7月12日 上午8:16
下一篇 2022年7月12日 上午8:16


相关推荐

  • js逆向_知识小结

    js逆向_知识小结目录 1 开发者工具小技巧 2 Fiddler 使用小技巧 3 python 代码小技巧 4 js 代码知识点

    2026年3月19日
    2
  • phpstorm2021永久激活码-激活码分享

    (phpstorm2021永久激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html9ZHRNTE33T-eyJsaWN…

    2022年3月28日
    856
  • labview如何旋转控件_labview怎么用

    labview如何旋转控件_labview怎么用龙源期刊网http://www.qikan.com.cn基于LabVIEW的旋转倒立摆系统设计作者:白富斌董君浩侯丽鹏来源:《现代商贸工业》2016年第09期摘要:以LabVIEW为平台,结合PID算法,对旋转倒立摆系统设计进行设计研究。在倒立摆旋转过程中,通过编码器将判断位置与角度的相应电信号反馈给上位机,上位机通过运行程序计算并输出信号进而来控制摆杆的的角度、位置,使倒立摆的摆杆不会下垂。关键…

    2022年8月18日
    6
  • Java学习路线图(完整详细2021版)

    Java学习路线图(完整详细2021版)作为一个男人我感觉必须得做点什么来证明一下自己,现在我又回来了,准备把自己的节操准备补一下 另外给各位未来的Java程序员说一句,别的我不清楚,学习编程请从一而终 咱们学习编程就挺难的,有这些先驱者来带领咱们学习,咱们应该感激,而且最重要的事跟着你选定的一家一直学下去 因为每家学校的学习大纲都是不一样的,但是程序员其实都是一样的,这句话你细品!仔细的品! 我不希望你忙忙碌碌的整理那么多东西,挑肥拣瘦的,最后自己学的东西还是缺失的,要不就…

    2022年5月17日
    87
  • linux文件共享 samba_docker阿里云盘

    linux文件共享 samba_docker阿里云盘我这里用的yum库安装的samba所有服务三步走战略,关闭防火墙,关闭沙盒,配置IP地址配置IP重启服务创建用户haha,hehe配置共享samba用户创建共享目录,赋予权限,进入到主smb文件进行配置,保存退出后配置别名配置共享目录,权限,加入用户保存退出先用Windows客户机进行验证将IP改为1.10后因为设置的拒绝无法访问修改IP地址后可以进行访问创建空文件,进行拖拽,…

    2025年11月29日
    7
  • Ubuntu 安装 yum

    Ubuntu 安装 yum120@110:~$sudoapt-getinstallyum120@110:~$aliasyum=’sudoapt-get’120@110:~$yuminstall119正在读取监狱室列表…完成正在分析监狱头犯的依赖关系树正在读取状态信息…完成

    2022年6月16日
    30

发表回复

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

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