遍历查询结果集的另一种思路

          在SQLServer中,有时需要数据库里实现SQL结果集遍历,当然首先会想到使用SQL游标,但SQL游标最大的缺点就是复杂和低效。

  • 创建表变量来保存临时结果集,@@RowCount来控制循环结束标记。

Create procdure pro

As

Begin

       declare @cwbrecord table /*定义订单的表变量 用于遍历订单号*/

        (

         cwb  varchar(50),   

         flagID TINYINT/*这个表变量中增加一个FLAGID进行数据初始值为0的存放,然后去循环这个记录集,每循环一次,就把对应的FLAGID 的值改成1,然后再根据循环来查找满足条件等于0的情况,每循环一次,处理的记录集就会少一次,达到快速遍历,此种方式比游标 遍历效率高很多*/

        )

       declare  @totalcount int

       declare  @rownum int

insert  into @cwbrecord  select ops.cwb,0 from express_ops_cwb

/*设置循环总数*/

set  @totalcount = @@ROWCOUNT

 /*设置循环起始值*/

           set @rownum = 1

/*    循环*/

        while @rownum <=@totalcount

         begin

             declare @cwb varchar(50)

              select top 1 @cwb=cwb from @cwbrecord where flagID=0

              ……你要完成的逻辑

              update @cwbrecord set flagID=1 where cwb=@cwb

              set @rownum = @rownum + 1

         End

End

 

 

你可能感兴趣的:(sql)