sqlserver 游标语法参照

alexlee 2023-1-21 417 1/21

一.在写sql过程中,特别是存储过程里边,会经常用到循环,而游标就是一种特殊的循环,在sql里边。

1.0 我们这里要强调一下,什么情况下,可以使用游标?

2.0 游标在sql里边是相当耗费资源的,所以我们对游标要非常谨慎的使用。

3.0 并不是随随便便就把游标这东西用上来。

大家可以就是说,能确定执行条数,不是几百W或是几十W的情况下,我个人感觉用游标是没什么影响。

大概几W的数据,使用游标还是行得通的,毕竟游标这语法,为我们写业务还是提供了一定的便捷性。

对于写习惯业务系统的开发人员来说,游标这东西并不陌生,因为很多业务都要在数据库里边进行计算与逻辑书写。

特别是单条数据进行循环,然后就对该数据进行各种操作,完成一系列业务之后,最后将数据存入表中。

特别体现在编写存储过程,为避免因游标的语法浪费时间,接下来我就将游标的语法贴出来,方便查看,也方便大家进行开发。

DECLARE @settlememono varchar(30),@contractno varchar(30),@chargecode varchar(30)
,@actstartdate date,@actenddate date,@count int,@settlememono2 varchar(30),@contractno2 varchar(30)
DECLARE cursor_name CURSOR FOR --定义游标
    SELECT s.settlememono,contractno,chargecode,startdate,enddate FROM settlememod1 d1
       inner join settlememo s on d1.settlememono=s.settlememono
    ORDER BY s.lastmodifydate DESC
OPEN cursor_name --打开游标
FETCH NEXT FROM cursor_name INTO  @settlememono,@contractno,@chargecode,@actstartdate,@actenddate  --抓取下一行游标数据
WHILE @@FETCH_STATUS = 0
    BEGIN
        select @count=count(1) from settlememod1 d1 inner join settlememo s on d1.settlememono=s.settlememono
               where contractno=@contractno and startdate=@actstartdate and enddate=@actenddate and chargecode=@chargecode and d1.settletype='C'
              if(@count>1)
              begin
                   select top 1 @settlememono2=s.settlememono,@contractno2=contractno from settlememod1 d1 inner join settlememo s on d1.settlememono=s.settlememono
                      where contractno=@contractno and startdate=@actstartdate and enddate=@actenddate and chargecode=@chargecode and d1.settletype='C'
                      order by s.lastmodifydate desc
                      print @settlememono2 + ',' + @contractno2
              end
        FETCH NEXT FROM cursor_name INTO @settlememono,@contractno,@chargecode,@actstartdate,@actenddate
    END
CLOSE cursor_name --关闭游标
DEALLOCATE cursor_name --释放游标
拿到上边的语法,主要将逻辑填入到中间的循环体,就可以实现一个复杂存储过程的编写。

以上是自己的做为资深开发的一些个人经历,把这些经验分享给大家,希望以后大家在从事开发中,可以避免不必要的麻烦,跟浪费时间精力。

要是大家喜欢我的文章的话,可以在文章下留言或是联系我,共同进步,共同探讨开发的一些案例,促进彼此间的交流,分享一些日常的开发趣事。

- THE END -
最后修改:2024年1月30日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论