关于游标
不知道有人遇到过这样的问题没?
当存储过程中有多条数据,要使用游标循环的时候,如果第一条数据没有满足条件就会跳出循环
后面有符合条件数据的数据就没能循环做出在循环中相应的操作
这样的问题该怎么解决呀?
循环的要求就是这样?满足或不满足条件时跳出循环.
除非你采用另外的条件来全部循环.
例如采用行号,从最小到最大.
没看懂,还是给数据来的直观些
那为什么要跳出呢?第一笔不满足直接进入下一笔不行么?类似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的)就直接跳出循环了,后面还有几条数据都没有循环了 就直接停止执行整个存储过程了