CREATE procedure createNewJobOrder
(@core_user_ids int,
@job_order_ids bigint,
@temp_job_order_id bigint output)as
 begin
     set xact_abort on
     begin transaction       declare @temp1 varchar(50);
       declare @temp2 varchar(10);
       declare @temp_job_order_number varchar(50)  ;
       declare @temp3 bigint;
       declare @pnHeaderId bigint;
       declare @jobGroupId bigint;
       
select @pnHeaderId=pn_header_id from job_order where job_order_id=@job_order_ids;
select @temp1=pn_number  from pn_header where pn_header_id=@pnHeaderId;
  select @temp2=department_order_segment+1000  from department where department_id=(select department_id from core_user where [user_id]=@core_user_ids);
set @temp_job_order_number=rtrim(@temp1)+'-'+rtrim(right(@temp2,3));
  select @temp3=job_order_id from job_order where job_order_number=@temp_job_order_number;  if @temp3 is null
   begin
insert into job_order(pn_header_id,department_id,work_process_id,job_order_number,job_order_qty,[user_id],pn_number,status,last_ticket_number)
                         values(@pnHeaderId,1,1,@temp_job_order_number,0,@core_user_ids,rtrim(@temp1),'01',1);
  select @temp3=job_order_id from job_order where job_order_number=@temp_job_order_number;
        insert into job_group(job_order_id,job_group_name,pn_group_id,create_date,change_date)
               select jo.job_order_id,png.GROUP_NAME,png.pn_group_id,getdate() as create_date,getdate() as change_date
from pn_header pn, pn_group png,job_order jo
               where pn.pn_header_id=@pnHeaderId and png.pn_header_id=pn.pn_header_id and jo.job_order_id=@temp3; declare c_jobQty cursor for select job_group_id from job_group where job_order_id=@temp3 order by job_group_id for read only;
 open c_jobQty;   while @@Fetch_status=0 --就这个游标这里麻烦大家帮我看看是不是哪里有问题,这个游标一下执行,一下又不执行的。
   begin
  fetch next from c_jobQty into @jobGroupId;
  insert into job_quantity(job_order_id,job_group_id,sp_size_id,quantity,quantity_receive,rework_qty)select @temp3,@jobGroupId,sp_size_id,quantity,0,0
from job_quantity where job_order_id=@job_order_ids;
   end close c_jobQty;
 deallocate c_jobQty;
end
 set @temp_job_order_id=@temp3;
            
 commit transaction
 end
GO

解决方案 »

  1.   

    print 'debug'  插入  分块调试
      

  2.   

     fetch next from c_jobQty into @jobGroupId;
    while @@Fetch_status=0 --就这个游标这里麻烦大家帮我看看是不是哪里有问题,这个游标一下执行,一下又不执行的。
          begin
             insert into job_quantity(job_order_id,job_group_id,sp_size_id,quantity,quantity_receive,rework_qty)select @temp3,@jobGroupId,sp_size_id,quantity,0,0
            from job_quantity where job_order_id=@job_order_ids;
             fetch next from c_jobQty into @jobGroupId;
          end
      

  3.   

    1.
    fetch next from c_jobQty into @jobGroupId;  
       while @@Fetch_status=0
          begin
             insert into job_quantity(job_order_id,job_group_id,sp_size_id,quantity,quantity_receive,rework_qty)select @temp3,@jobGroupId,sp_size_id,quantity,0,0
            from job_quantity where job_order_id=@job_order_ids;       fetch next from c_jobQty into @jobGroupId;
          end2.错误处理,
    BeginTry ... EndTry 
    BeginCatch...EndCatch..3.Rollback transaction