前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SQL游标使用——格式、实例、嵌套

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

作者头像
全栈程序员站长
发布于 2022-09-14 07:44:27
发布于 2022-09-14 07:44:27
73800
代码可运行
举报
运行总次数:0
代码可运行

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

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

一、游标的一般格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 游标名称 (释放游标)

二、具体实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,实现语句如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.cn/158156.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
记一个数据库游标的实例
--数据游标在数据库中起到的就是一个书签的作用,它让一个抽象的成员实例化为一个准确的对象。游标虽好,但是可不能多次使用,运行效率会降低! USE [数据库名] GO Create procedure [dbo].[proc_gitcontent]//存储过程名称 as declare --声明变量(用于插入数据) @content varchar(max), @sendsuccesscount int, @sendfailecount int, @submitfailcount int, @unk
追逐时光者
2022/02/15
3290
[sql server] 合并字符串
本文转载:http://blog.csdn.net/leamonjxl/article/details/7042317
跟着阿笨一起玩NET
2018/09/18
1.3K0
Sqlserver存储过程如何写循环
1.简单的循环语句 declare @i int set @i = 0 while @i < 100 begin print @i set @i = @i + 1 end 2.使用Sqlserver自带的while循环来循环表数据 -- 定义循环变量 declare @loopIndex int set @loopIndex = 0 --定义循环次数 declare @count int set @count=1 -- 取得循环次数 select @count=count(1) from sys_us
十分钟空间
2022/08/17
3.3K0
SQL游标
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
全栈程序员站长
2022/09/07
4800
国产化之路 Linux Mono下的asp.net 开发笔记(二)
       由于原来使用的是MS SQL SERVER 数据库,想实现在SQL查询分析器里,生成创建达梦数据表的脚本。因此写了一个存储过程,该过程实现输入一个表名,会自动转换为对应的脚本,包括创建表和创建键值(修改表)的脚本输出。这是一个适合自己框架的范例程序,大家有兴趣可以进一步修改。脚本代码如下:
初九之潜龙勿用
2024/06/20
1370
游标
游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。
ellipse
2019/08/16
6480
游标
SQL游标的使用与语法
declare @name nvarchar(35)  declare @number int
javascript.shop
2019/09/04
1.4K0
数据库开发中比较少用的功能
触发器是一类特殊的事务,可以监视某种数据操作(insert|update|delete),并触发相关操作(insert|update|delete)。
鱼找水需要时间
2023/12/31
1310
SQL 循环语句 while 介绍 实例
WHILE 设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。
全栈程序员站长
2022/07/18
1.7K0
SQL Server基础:T-SQL编程、游标、存储过程创建与信息查找
  本文介绍基于Microsoft SQL Server软件,实现数据库T-SQL语言程序设计,以及游标的定义、使用与存储过程的创建、信息查找的方法。
疯狂学习GIS
2025/03/29
630
SQL Server基础:T-SQL编程、游标、存储过程创建与信息查找
T-SQL程序练习03
目录 一、利用 𝑆𝑒𝑎𝑠𝑜𝑛 表,参照结果,写一个存储过程𝑆𝑒𝑎𝑠𝑜𝑛𝐿𝑎𝑛𝑑𝑆𝑐𝑎𝑝 1. 具体要求 2. T-SQL程序代码 3. 结果显示 二、写一个存储过程 𝑀𝑎𝑔𝑖𝑐𝑁𝑢𝑚𝑏𝑒 1. 具体要求 2. T-SQL程序代码 3. 结果显示 三、写存储过程验证四年级数学题 1. 具体要求 2. T-SQL程序代码 3. 结果显示 四、利用𝐶𝑜𝑠𝑚𝑒𝑡𝑖𝑐 表,参照结果,写一个存储过程 𝐶𝑜𝑠𝑚𝑒𝑡𝑖𝑐𝑅𝑒𝑝𝑜𝑟 1. 具体要求 2. T-SQL程序代码 3. 结果显示 ---- 一、利用 𝑆𝑒𝑎𝑠𝑜𝑛
会洗碗的CV工程师
2022/12/28
3620
T-SQL程序练习03
游标
执行结果 1         2       测试看看      xland 2         4       asdfasdf      xland 3         5       asdfasdf      xland 4         6       全文索引全文索引全文索引xland的全文索引      xland 再看一种执行方式
liulun
2022/05/08
5120
游标清除重复数据
有时候导数据会把数据导重,需要根据某些信息清除掉重复数据,同学做信息机业务的,不小心把用户信息导重复了,造成不能发短信。我帮他写了个游标来清理重复数据。membermobile是手机号、memberid是主键。下面是详细代码: DECLARE @memberMobile nvarchar(255) DECLARE @I INT DECLARE @memberid INT DECLARE TEST CURSOR FOR select MemberMobile from tbl_member group by 
用户1183026
2018/01/19
8880
游标和动态SQL
游标类别:静态游标(指在编译的时候,游标就与一个select语句进行了静态绑定的游标,这种游标只能作用于一个查询语句)和动态游标(就是希望我们的查询语句在运行的时候才跟游标绑定,为了使用动态游标,必须声明游标变量)。
全栈程序员站长
2022/09/09
1K0
sql游标的基本语法
Declare Sursors CURSOR for select u.U_UserName,u.U_ID from Users u; –where u.UserName like ‘%w%’; –打开游标 open Sursors; –提取数据 –格式 declare @userid varchar(50) declare @username varchar(50) fetch next from Sursors into @username,@userid –移到游标中的下一行并把游标中的列值获取到Into中列出的变量中 while @@fetch_status=0 –检查是否读取到数据 begin print ‘编号:’+ @userid print ‘姓名:’+ @username –应用取出数据(存放在变量中)进行操作的语句 fetch Sursors into @username,@userid end close Sursors deallocate Sursors
全栈程序员站长
2022/09/14
4710
Mysql 游标
当前有三张表A、B、C其中A和B是一对多关系,B和C是一对多关系,现在需要将B中A表的主键存到C中; 常规思路就是将B中查询出来然后通过一个update语句来更新C表就可以了,但是B表中有2000多条数据, 难道要执行2000多次?显然是不现实的;最终找到写一个存储过程然后通过循环来更新C表, 然而存储过程中的写法用的就是游标的形式。
Cyylog
2020/08/19
3.5K0
oracle游标的使用详解_oracle游标失效
游标(CURSOR):游标是把从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种操作。
全栈程序员站长
2022/11/18
1.9K0
oracle游标的使用详解_oracle游标失效
mysql存储过程----游标
游标是用来存储查询结果集的数据类型,在存储过程和存储函数中可以使用游标对结果集进行循环处理,游标的使用包括游标声明、open、fetch和close,语法如下:
用户5899361
2020/12/07
2.9K0
PL/SQL 编程(二)游标、存储过程、函数
游标--数据的缓存区 游标:类似集合,可以让用户像操作数组一样操作查询出来的数据集,实质上,它提供了一种从集合性质的结果中提取单条记录的手段。 可以将游标形象的看成一个变动的光标,他实质上是一个指针,在一段Oracle存放数据查询结果集或者数据操作结果集的内存中,这个指针可以指向结果集任何一条记录。 游标分静态游标和REF游标两类,静态游标包含显式游标和隐式游标。 显式游标: 在使用之前必须有明确的游标声明和定义,这样的游标定义会关联数据查询语句,通常会返回一行或多行。打开游标后,用户可以利用游标的位置对结
二十三年蝉
2018/02/28
3.8K0
⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..
注意:用户定义的变量无需对其进行声明或初始化,不声明或初始化获取到的值为NULL。
.29.
2023/11/20
2.2K0
⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..
相关推荐
记一个数据库游标的实例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文