declare ..........
      ..................
      OPEN qc_pm_creat_app_cur 
      FETCH next from qc_pm_creat_app_cur
        INTO @v_receive_no, @v_seq_no, @v_vendor_code, @v_vendor_name, @v_receive_date, @v_item_code,
             @v_item_name, @v_pm_unit, @v_pm_unit_name, @v_receive_qty, @v_vendor_abv, @v_receive_note,
             @v_receive_type;
      while 1=1
      begin              if @@fetch_status<>0   --当找不到结果时
            break     
            ...............
            ...............
            ...............
            诸多处理.......
            ..GOTO BB
            ................
     BB:   
           FETCH NEXT FROM qc_pm_creat_app_cur
           INTO @v_receive_no, @v_seq_no, @v_vendor_code, @v_vendor_name, @v_receive_date, @v_item_code,
               @v_item_name, @v_pm_unit, @v_pm_unit_name, @v_receive_qty, @v_vendor_abv, @v_receive_note,@v_receive_type;
     end
     close qc_pm_creat_app_cur
     Deallocate qc_pm_creat_app_cur
     
---------
在执行的时候提示:
服务器: 消息 16915,级别 16,状态 1,行 1
名为 'qc_pm_creat_app_cur' 的游标已存在。
服务器: 消息 16905,级别 16,状态 1,过程 qc_pm_apply_create_sp,行 262
游标已打开。
-------------------
我估计是BB后面fetch的问题,
但是不知道该做如何修改
各位大虾赐教啊!!!

解决方案 »

  1.   

    注意OPEN qc_pm_creat_app_cur這一段
      

  2.   

    游標沒有執行到
      Deallocate qc_pm_creat_app_cur
      

  3.   

    服务器: 消息 16915,级别 16,状态 1,行 1
    名为 'qc_pm_creat_app_cur' 的游标已存在。
    服务器: 消息 16905,级别 16,状态 1,过程 qc_pm_apply_create_sp,行 262
    游标已打开。找 262 行,前面是否已经打开游标,如果此句是打开游标,则将前面打开的同名游标关闭
      

  4.   

    游标写的真丑,直接while @@fetch_status=0不就得了
    折腾
      

  5.   

    在open前面有个
           set @v_sql = 'SELECT receive_no, seq_no, vendor_code, vendor_name, receive_date, item_code, item_name, pm_unit,
               pm_unit_name, receive_qty, vendor_abv, receive_note,receive_type
          FROM pm_receive_detail
         WHERE company_code = ''' + @pi_company_code + '''
           AND qc_select_flag = ''Y''
           AND isnull(qc_create_flag, '' '') <> ''Y''
           AND quality_flag = ''Y''
           AND item_style = ''M'' and buyer_id=''' + @pi_user_unique_id + '''';
           end
          
          
          exec( 'DECLARE   qc_pm_creat_app_cur   Cursor   for   '+@v_sql) 
          open 
    .............................
      

  6.   

    我看楼主的goto没有用啊?
    一般可以用 
    declare..
    open ..
    fetch ..
    while  @@fetch_status=0
    begin
     --处理
     fetch next
    endclose ..
    deallocate ..