首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请大家帮小弟我看看这个存储过程中的游标有什么有关问题,为什么不循环

2012-03-16 
请大家帮我看看这个存储过程中的游标有什么问题,为什么不循环CREATEproclstable1@IDcodevarchar(100)astru

请大家帮我看看这个存储过程中的游标有什么问题,为什么不循环
CREATE   proc   lstable1  
@IDcode   varchar(100)

as  

truncate   table   ls

declare   cur_ls   cursor
      for   select   收款单位,品名,等级,SDate,EDate   from   付款凭证   where   order_id=@IDcode
open   cur_ls
declare  
@CusName   Varchar(100),
@StartTime   datetime,
@EndTime   datetime,
@Mname   varchar(100),
@GradeName   varchar(100)

if   @@error   =0
    begin
    while   @@fetch_status=0
            begin
              fetch   next   from   cur_ls   into   @CusName,@Mname,@GradeName,@StartTime,@EndTime
              if   @@fetch_status=0
                    begin

                insert   ls(品名,等级,数量,ID)  
                    select   Mname,GradeName,Jweight,IDcode   from  
                          app_v_ponderation   where  
                          (jweight   is   not   null)   and  
                          (CusName   like   @CusName)     and  
                          (Mname   like   @Mname)   and
                          (GradeName   like   @GradeName)   and
                          (billdate   between   @starttime   and   @endtime)   and  
                          (remark   like   '%入% ')  
                            order   by   id
                        end
                  else
                        break
                  end
      end
close   cur_ls
deallocate   cue_ls


GO


[解决办法]
--参考,你的貌似少了一个fetch
DECLARE t_Cursor CURSOR FOR
select * ……
OPEN t_Cursor
FETCH NEXT FROM t_Cursor into @a……
WHILE @@FETCH_STATUS = 0
BEGIN
……
FETCH NEXT FROM t_Cursor into @a……
END
CLOSE t_Cursor
DEALLOCATE t_Cursor
[解决办法]
--try

CREATE proc lstable1
@IDcode varchar(100)

as

truncate table ls

declare cur_ls cursor
for select 收款单位,品名,等级,SDate,EDate from 付款凭证 where order_id=@IDcode
open cur_ls
declare
@CusName Varchar(100),
@StartTime datetime,
@EndTime datetime,


@Mname varchar(100),
@GradeName varchar(100)


fetch next from cur_ls into @CusName,@Mname,@GradeName,@StartTime,@EndTime

while @@fetch_status=0
begin

insert ls(品名,等级,数量,ID)
select Mname,GradeName,Jweight,IDcode from
app_v_ponderation where
(jweight is not null) and
(CusName like @CusName) and
(Mname like @Mname) and
(GradeName like @GradeName) and
(billdate between @starttime and @endtime) and
(remark like '%入% ')
order by id

fetch next from cur_ls into @CusName,@Mname,@GradeName,@StartTime,@EndTime

end

close cur_ls
deallocate cue_ls


GO
[解决办法]
打開遊標後, 指針定位在第一條記錄前
[解决办法]
fetch next from cur_ls into @CusName,@Mname,@GradeName,@StartTime,@EndTime

--取下一行
--第一个fetch只是取第一行
[解决办法]
通俗的讲就是先fetch一下,然后才能判断@@fetch_status等于几啊。
[解决办法]
贴出表结构和一部分数据可以不!?

热点排行