进阶技能篇:SQL中的while循环与游标
上⼀篇我们讲到SQL的存储过程和函数,本篇我们继续讲解进阶技能中重要知识点:while循环和游标的使⽤。
⼀、while循环:⾸先来看⼀段代码
create table#temp1
(xh int)
declare@i int
set@i=1
while@i<=80
begin
insert into#temp1
select@i
set@i=@i+1
end
select*from#temp1
释义 :
(1)⾸先创建个临时表#temp1,它只有⼀个字段xh;
(2)定义⼀个变量@i ,其类型为int ,并赋值为1 ;
(3)下来便是while 循环体了,其格式为:
while 条件
beign
…
end
主要意思就是,当while后⾯的条件满⾜时,便⼀直执⾏begin和end之间的语句,直到不满⾜while后⾯的条件。
结合上⾯的例⼦,就是当@i⼩于等于80时,⼀直执⾏下⾯的语句。
insert into#temp1
select@i
set@i=@i+1
这个insert into 前⾯基础篇讲过的,就是往临时表⾥插数据,也就是@i这个变量,然后紧接着,set @i =@i+1 就是让@i ⾃增。这句话很重要,没有这句话,程序就会陷⼊死循环。
这样综合起来,实现的结果就是,将数字1⾄80,循环插⼊表#temp。
(4)最后,我们看下表#temp的结果:
讲到这⾥,应该对while循环⼤致有个理解了吧,还没理解就翻回去再好好看看⼀下代码。
⼆、游标:
⼀开始其实没想讲这个游标,因为性能问题, ⼀般不推荐使⽤。但是考虑到项⽬上实际应⽤中可能会遇到,所以还是拿出来讲下。游标的循环机制,其实类似于while,但是语法不⼀样,还是以上边的#temp1表为例,我们再来⼀段例⼦:
declare@xh int
declare yb_cs cursor
for
select xh from#temp1 --定义游标
open yb_cs ---打开游标
fetch next from yb_cs into@xh--读取游标
while(@@fetch_status=0)
begin
delete from#temp1 where xh=@xh and xh%7<>0
fetch next from yb_cs into@xh
/**读取下⼀个游标:**/
end
close yb_cs--关闭游标
deallocate yb_cs--删除游标
以上代码实现的效果,就是对#temp1表的数据进⾏逐条判断,将不能被7整除的数据delete掉,当然最简单的写法就是:
delete from#temp1 where xh%7<>0
但是此处主要⽬的是为了讲解游标的使⽤与理解,所以就拿这句话做个例⼦,实际项⽬中可能语句会复杂的多。
while语句简单例子总结:
(1)while循环和游标都可以实现循环的⽬的,while⽤法⽐较简洁明了;
(2)游标是在while的基础上实现循环的功能,但是语法较复杂,且效率没有while⾼,所以⼀般不推荐使⽤;
(3)while循环体内⽀持再嵌套⼀个循环,但是⼀定要注意不能出现死循环,否则sql服务就会卡死、崩溃。
好了,以上就是今天的分析内容,喜欢的请收藏、点赞、转发,更多其他精彩知识,请查看本号历史⽂章。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论