CREATE PROCEDURE myPro @vol   int,@num   int ,@code varchar(20)  ASdeclare    @status int 
set @status = convert (int,rand()*10000)update  cost_stock   
  set  cs_end   =@vol  ,cs_status = @status
where cs_end <> 0 and cs_type = 'A'  and cs_sku  = @codeinsert into cost_stock (cs_sku,cs_type)
  select cs_sku,'B' from cost_stock 
     where cs_status = @status and cs_sku  = @code
update  cost_stock   
  set   cs_status = 0
where  cs_type = 'A'  and cs_sku  = @codeGO谢谢~~~~

解决方案 »

  1.   

    本身都是很简单的sql语句,没有什么优化的余地
      

  2.   

    update  cost_stock   
      set  cs_end   =@vol  ,cs_status = @status
    where cs_end <> 0 and cs_type = 'A'  and cs_sku  = @codeinsert into cost_stock (cs_sku,cs_type)
      select cs_sku,'B' from cost_stock 
         where cs_status = @status and cs_sku  = @codeupdate  cost_stock   
      set   cs_status = 0
    where  cs_type = 'A'  and cs_sku  = @code
    --------------------------------------------insert into cost_stock (cs_sku,cs_type)
      select cs_sku,'B' from cost_stock 
         where cs_status = @status and cs_sku  = @code
    update  cost_stock   
      set  cs_end   = (case when cs_end <> 0 then @vol else cs_end end)  ,cs_status = 0
    where cs_end <> 0 and cs_type = 'A'  and cs_sku  = @code
    -------------------------------------------
    你第一句UPDATE里的cs_status = @status 不是白写吗?因为在第三句 做了不管cs_end 是不是等于0 都会让cs_status=0