帮我解释一下代码中前5行中用到游标的作用(实现了什么)及用法规则;谢谢!Declare orders CURSOR FOR select a.ordno ,b.PROGNAME,a.sampname from orders a ,SAMPLE_PROGRAMS b
where a.sp_code=b.sp_code and folderno=@folderno 
OPEN orders --找到几个样品
FETCH FROM orders INTO @ordno,@PROGNAME,@sampname --样品循环

WHILE @@FETCH_STATUS = 0
BEGIN
--样品名称 
/****************************************/
set @i_ordno=convert(varchar(3),convert(int,( Substring(@ordno,10,3) ) ) )--转成数字型  

if exists (select top 1 origrec from #CDC_PRINTINFO where folderno=@folderno and dept=@dept and ITEMGROUP='样品名称:' and item=@sampname)  
begin  
select @origrec=origrec from #CDC_PRINTINFO where folderno=@folderno and dept=@dept and ITEMGROUP='样品名称:' and item=@sampname  
update #CDC_PRINTINFO set ordno=ordno+','+convert(varchar(3),@i_ordno) where origrec=@origrec  
end  
else  
begin  
insert into #CDC_PRINTINFO(dept,folderno,ITEMGROUP,ordno,item,orderby)   
  values (@dept,@folderno,'样品名称:',@i_ordno,@sampname,8)  
end   
--样品数量 
/****************************************/
set @i_ordno=convert(varchar(3),convert(int,( Substring(@ordno,10,3) ) ) )--转成数字型  

if exists (select top 1 origrec from #CDC_PRINTINFO where folderno=@folderno and dept=@dept and ITEMGROUP='样品数量:' and item=@sampname)  
begin  
select @origrec=origrec from #CDC_PRINTINFO where folderno=@folderno and dept=@dept and ITEMGROUP='样品数量:' and item=@sampname  
update #CDC_PRINTINFO set ordno=ordno+','+convert(varchar(3),@i_ordno) where origrec=@origrec  
end  
else  
begin  
insert into #CDC_PRINTINFO(dept,folderno,ITEMGROUP,ordno,item,orderby)   
  values (@dept,@folderno,'样品数量:',@i_ordno,'1',8)  
end  
--检测项目和方法按科室分
Declare item CURSOR For select b.testcode,b.testno from  ordtask a,TESTS b where a.TESTCODE = b.TESTCODE AND A.ordno=@ordno and A.dept=@dept
--Declare item CURSOR For select b.testcode,b.testno from  ordtask a,TESTS b where a.ordno=@ordno AND a.TESTCODE = b.TESTCODE
OPEN item
FETCH FROM item INTO @testcode,@testno
WHILE @@FETCH_STATUS = 0
BEGIN
IF CHARINDEX('-',@testno)>1
select @testno=SUBSTRING(@testno,1,CHARINDEX('-',@testno)-1)
set @temptestno=@temptestno+@testno+'.'
/****************************************
检测方法
****************************************/
select @method=b.METHOD from  TESTS  a,TEST_METHODS b 
where a.method=b.method and a.testcode=@testcode --and a.dept=@dept 该处不用部门过滤。上面已经过滤
if exists (select top 1 origrec from #CDC_PRINTINFO where folderno=@folderno and dept=@dept and ITEMGROUP='检测方法:' and item=@testno+' - '+@method)
begin
select @origrec=origrec from #CDC_PRINTINFO where folderno=@folderno  and dept=@dept and ITEMGROUP='检测方法:' and item=@testno+' - '+@method
update #CDC_PRINTINFO set ordno=ordno+','+convert(varchar(3),@i_ordno) where origrec=@origrec
end
else
insert into #CDC_PRINTINFO(dept,folderno,ITEMGROUP,ordno,item,orderby) 
values (@dept,@folderno,'检测方法:',@i_ordno,@testno+' - '+@method,2)
FETCH FROM item INTO @testcode,@testno
END
CLOSE item
DEALLOCATE item
FETCH FROM orders INTO @ordno,@PROGNAME,@sampname --样品循环
END
CLOSE orders
DEALLOCATE orders end --while Exists(Select * from #dept)

解决方案 »

  1.   

    Declare orders CURSOR FOR select a.ordno ,b.PROGNAME,a.sampname from orders a ,SAMPLE_PROGRAMS b  
    where a.sp_code=b.sp_code and folderno=@folderno   
    OPEN orders --找到几个样品  
    FETCH FROM orders INTO @ordno,@PROGNAME,@sampname --样品循环  
    WHILE @@FETCH_STATUS = 0  声明游标 
    打开游标!   
    查询出一段的话然后 吧值赋给 @ordno,@PROGNAME,@sampname 
      

  2.   

    declare orders CURSOR FOR -->定义游标
    OPEN orders -->打开游标,打开的结果集是 select a.ordno ,b.PROGNAME,a.sampname from orders a ,SAMPLE_PROGRAMS b where a.sp_code=b.sp_code and folderno=@folderno 
    FETCH FROM orders INTO @ordno,@PROGNAME,@sampname -->提取一行数据,放到变量中保存。
      

  3.   

    --建立游标
    Declare orders CURSOR FOR select a.ordno ,b.PROGNAME,a.sampname from orders a ,SAMPLE_PROGRAMS b 
    where a.sp_code=b.sp_code and folderno=@folderno 
    --打开游标 
    OPEN orders --找到几个样品 
    --取游标内第一条数据,并把它们赋值给@ordno,@PROGNAME,@sampname 
    FETCH FROM orders INTO @ordno,@PROGNAME,@sampname --样品循环 
    --循环使用游标,直到最后一条
    WHILE @@FETCH_STATUS = 0 
    BEGIN