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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 实现带查询功能的Combox控件

    实现带查询功能的Combox控件

    2021年11月30日
  • vmware15激活码-激活码分享

    (vmware15激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • MySQL 索引概览

    MySQL 索引概览前言在SQL优化中,索引是至关重要的一环,能给查询效率带来质的飞跃,但是索引并不是万能的,不合理的索引设计甚至会拖慢查询效率。本文将详细介绍各类索引的定义、用法以及分类,并讨论使用索引时应该权衡的要素。文章目录前言概览索引定义索引优缺点优点缺点索引类型按功能逻辑划分普通索引唯一索引主键索引全文索引按物理实现划分聚集索引(clusteredindex)非聚集索引(non-clusteredindex)按字段个数划分单一索引组合索引最左匹配原则概览索引定义索引是一种专门用于帮助SQL高效获

  • 中国软件外包IT公司最新排名

    中国软件外包IT公司最新排名http://cnitcomments.com/companylist/topoutsourcing.htm1.博朗软件Bleum(上海)2.中软国际(北京)3.东软集团Neusoft(沈阳)4.博彦科技BeyondSoft(北京)5.海辉软件HiSoft(大连)6.文思VanceInfo(北京)7.浙大网新Insigma(杭州)8…

  • Web Visibilitychange

    Web Visibilitychangevisibilitychange(vc贝雷忒change)浏览器标签页被隐藏或显示的时候会触发visibilitychange事件. visible:当前页面可见.即此页面在前景标签页中,并且窗口没有最小化. hidden:页面对用户不可见.即文档处于背景标签页或者窗口处于最小化状态,或者操作系统正处于’锁屏状态’. prerender:页面此时正在渲染中,因此是不可见的.文档只能从此状态开始,永远不能从其他值变为此状态.注意:浏览器支持是可选的. unloaded

  • input 事件[通俗易懂]

    input 事件[通俗易懂]input事件1.onfocus当input获取到焦点时触发2.onblur当input失去焦点时触发,注意:这个事件触发的前提是已经获取了焦点再失去焦点的时候会触发相应的js3.onchange当input失去焦点并且它的value值发生变化时触发4.onkeydown在input中有键按住的时候执行一些代码5.onkeyup在input中有键抬起的时候触发的事件,…

发表回复

您的电子邮箱地址不会被公开。

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