天天看点

存储过程——游标循环

sqlserver中的循环遍历(游标循环)

https://www.cnblogs.com/xielong/p/5941595.html,博主小小邪。

---------------------------------------------上面是博主学习的博客↑

---------------------------------------------下面是个人实践经验,感觉比较适合小白同学注意的地方↓

我在学习游标的时候,在对游标运行逻辑一知半解的情况下写了个游标的存储过程,而且是三个游标的嵌套(因为我也兼职代码程序开发,所以一眼看下来感觉跟for循环差不多,就可以着手了)。结果一口气写完,完了,出错了,出什么错了,下面↓

 fetch next from order_cursor into @temp 

我当初就是以为他在取值的同时continue,当时还为这个东西惑惑不解了大半天,东问西问。

后面研究发现这句话的作用仅仅是负责取游标容器中的下一个值,是用来取值的,取值的,他并不负责回到游标最上层,

哇,现在想起来也太丢人了。

其实我感觉游标循环是可以分为两部分去理解的,第一部分就是游标,第二部分就是循环↓

存储过程——游标循环

详解:

DECLARE cursor CURSOR FOR SELECT * FROM TABLE --定义游标容器,并且赋予其数据

        OPEN cursor  -- 打开容器

        DECLARE @A  --定义变量@A,用来接纳游标容器中的某一行的某一个字段值,存储过程常用函数。

        FETCH NEXT FROM cursor INTO @A --将游标容器中,第一行数据的值赋值给@A

        WHILE @@FETCH_STATUS=0 --判断是否取值成功,如果成功则 @@FETCH_STATUS为0,如不成功则为-1.

        BEGIN --开始WHILE 循环

        。。(处理逻辑)        

        FETCH NEXT FROM cursor INTO @A  --在结束循环前取游标容器的下一行值

        END --结束循环

        CLOSE cursor  --关闭游标容器,有打开则有关闭,有始有终

        DEALLOCATE cursor --释放游标资源,做完我们要的东西后清理垃圾,学过c语言的同学应该知道,需要释放资源,这里同理。

↑这里就完成了游标循环

小提示: 

     在sqlserver存储过程中,我们常常会用到临时表 #t 用来方便数据查询,而用完后,对于临时表的删除是非常必要的,不然在上千行的存储过程写完后,再去回过头删除时非常痛苦的一件事情,所以各位同学警记,下面是删表的逻辑判断:

IF object_id('tempdb..#a') is not null 

begin 

drop table #a

end   

而drop table 是非常危险的一个动作,如果你写成了实体表还运行了,那就跑路吧,至于怎么跑路,我建议你看一本书《入职三天,从删库到跑路》

    so good,各位一起Upup!

平时多记记,到用时才能看看,记录你的进步,分享你的成果