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


相关推荐

  • idea设置springboot热部署

    idea设置springboot热部署一.由于使用springboot开发时,需要经常修改代码,但是每次的修改需要重启springboot的启动类才能生效,所以我们需要设置成热部署的方式,大大减少启动时间,提高开发效率.二.设置热启动包括两方面:(1)在pom.xml文件中添加热部署的依赖<dependency><groupId>org.springfra…

    2022年5月4日
    178
  • mybatis xml 格式化时间查询

    mybatis xml 格式化时间查询格式化到时分秒也可以到天<iftest=”beginTime!=null”>andDATE_FORMAT(send_time,’%Y-%m-%d%H:%M:%S’)&gt;=DATE_FORMAT(#{beginTime},’%Y-%m-%d%H:%M:%S’)</if><iftest=”endTime!=null”&g…

    2022年7月16日
    77
  • idea打包jar没有主清单属性_maven库中有jar包,但是引入不到

    idea打包jar没有主清单属性_maven库中有jar包,但是引入不到推荐必看:https://blog.csdn.net/persistencegoing/article/details/84376427问题:springboot项目通过maven打包程序后,直接执行jar包时,控制台显示“没有主清单属性”。解决:在maven的pom文件中,编写maven-jar-plugin的插件,具体如下<plugin>&…

    2025年9月14日
    7
  • Windows + Claude Code + Cursor 安装、配置和激活!揭秘最全指南!

    Windows + Claude Code + Cursor 安装、配置和激活!揭秘最全指南!

    2026年3月16日
    2
  • VS2019安装和使用教程(超详细)

    VS2019安装与使用教程可能有很多小伙伴们,知道VS2019这个软件,但是不知道怎么安装与使用,下面我将具体介绍VS2019的安装方法与创建我们自己的C++项目以及如何运行自己编写的代码!VisualStudio2019(VS2019)简介        MicrosoftVisualStudio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要

    2022年4月8日
    3.0K
  • Linux常用命令详解_常用shell命令

    Linux常用命令详解_常用shell命令一、日常使用命令/常用快捷键命令开关机命令    1、shutdown–hnow:立刻进行关机     2、shutdown–rnow:现在重新启动计算机     3、reboot:现在重新启动计算机     4、su-:切换用户;passwd:修改用户密码     5、logout:用户注销常用快捷命令     1、…

    2022年8月21日
    8

发表回复

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

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