郁闷的大象

 

关于游标

不知道有人遇到过这样的问题没?

当存储过程中有多条数据,要使用游标循环的时候,如果第一条数据没有满足条件就会跳出循环

后面有符合条件数据的数据就没能循环做出在循环中相应的操作

这样的问题该怎么解决呀?

 

循环的要求就是这样?满足或不满足条件时跳出循环.
除非你采用另外的条件来全部循环.

例如采用行号,从最小到最大.

 

没看懂,还是给数据来的直观些

 

那为什么要跳出呢?第一笔不满足直接进入下一笔不行么?类似continue而不是break

 


declare@recevarchar(500)
          declare@MsgTitlevarchar(200)
          declare@mmsLocvarchar(500)
         declare M cursor--创建游标 M            static 
         forselect MsgTitle,MMSContentLocation from UV_MsgInbox t3 where t3.MsgType=1and t3.MsgArrivedTime >=dateadd(minute,-5,getdate())  and t3.sender in (select 号码 from Result groupby 号码)
        open M --打开游标fetchnextfrom M into@MsgTitle,@mmsLocset@mmsLoc=substring(@mmsLoc,0,charindex(',',@mmsLoc)) 
        while(@@fetch_status=0)
            begindeclare sm cursor
              static
            forselect a from dbo.fn_split(@receiver,',')
               open sm
            fetchnextfrom sm into@recewhile(@@fetch_status=0)
                   beginifnotexists(select*from MSG_Sentbox where msgTitle=@sentContentand MMSContentLocation=@mmsLocand Receiver=@strand ActualSendTime >=dateadd(minute,-10,getdate()))
                    insertinto dbo.MSG_Outbox (Receiver,MsgType,MsgTitle,MMSContentLocation,SendTime)  values(@rece,1,@MsgTitle,@mmsLoc,getDate())
                    fetchnextfrom sm into@receendclose sm
                deallocate sm
            fetchnextfrom M into@MsgTitle,@mmsLocset@mmsLoc=substring(@mmsLoc,0,charindex(',',@mmsLoc))     
            endclose M
        deallocate M
        end

双重循环,就是在第二个循环,循环第一条数据的时候 (也就是我判断的是if not exists,其实循环第一条数据的时候是 exists的)就直接跳出循环了,后面还有几条数据都没有循环了 就直接停止执行整个存储过程了

posted on 2011-12-03 13:02  郁闷的大象  阅读(210)  评论(0编辑  收藏  举报

导航