存储过程(回滚+if语句+返回参数+用类接收参数)实例

CREATE PROCEDURE  change_product
@result varchar(50)  output,
@product_no varchar(50),
@color varchar(50),
@product_size varchar(50),
@oldcolor varchar(50),
@oldproduct_size varchar(50),
@stockid  int,
@oldstockid int,
@number int,
@users varchar(50),
@orderno varchar(50),
@memo_product_inout_record text

 AS
 
 declare @stockname varchar(50)
 declare @oldstockname varchar(50)
 declare @color2 varchar(50)
begin TRANSACTION
           declare @nror int
           set @nror=0        


   if @stockid>0 and @oldstockid>0
   begin
select  @stockname=stockname from tbl_stockid where stockid=@stockid
select top 1  @color2=color2 from tbl_productstore where product_no=@product_no and color=@color
  select @oldstockname=stockname from tbl_stockid where stockid=@oldstockid

           
/*如果原订单库存为自备货*/
   if @oldstockid=1 or @oldstockid=2 or @oldstockid=3
begin
         /*如果新订单库存为自备货*/
        if @stockid=1 or @stockid=2 or @stockid=3
        begin
        
           update tbl_productstore set number=number+@number,lock_number=lock_number-@number where product_no=@product_no and color=@oldcolor and product_size=@oldproduct_size and stockid=@oldstockid 
           set @nror=@nror+@@error
          
			insert into tbl_product_inout_record
		(product_no,color,product_size,number2,stock,users,operation_type,operation,memo)
		 values (@product_no,@oldcolor,@oldproduct_size,@number,@oldstockname,@orderno+'|'+@users,'入库','修改订单',@memo_product_inout_record)    
		  set @nror=@nror+@@error
		  
		             update tbl_productstore set number=number-@number,lock_number=lock_number+@number where product_no=@product_no and color=@color and product_size=@product_size and stockid=@stockid 
           set @nror=@nror+@@error
          
			insert into tbl_product_inout_record
		(product_no,color,product_size,number2,stock,users,operation_type,operation,memo)
		 values (@product_no,@color,@product_size,0-@number,@stockname,@orderno+'|'+@users,'出库','修改订单',@memo_product_inout_record)    
		  set @nror=@nror+@@error
		   
		   update tbl_trade set stockid=@stockid,color=@color,product_size=@product_size,color2=@color2  where orderno=@orderno
		   set @nror=@nror+@@error  	   
        
        end       
        
        /*如果新订单库存为全国货或都银泰仓库*/
        else if @stockid=4 or @stockid=5
        begin
        
                   update tbl_productstore set number=number+@number,lock_number=lock_number-@number where product_no=@product_no and color=@oldcolor and product_size=@oldproduct_size and stockid=@oldstockid 
           set @nror=@nror+@@error
                     
			insert into tbl_product_inout_record
		(product_no,color,product_size,number2,stock,users,operation_type,operation,memo)
		 values (@product_no,@oldcolor,@oldproduct_size,@number,@oldstockname,@orderno+'|'+@users,'入库','修改订单',@memo_product_inout_record)    
		  set @nror=@nror+@@error
		  
		  update tbl_productstore set number=number-@number,lock_number=lock_number+@number where product_no=@product_no and color=@color and product_size=@product_size and stockid=@stockid 
           set @nror=@nror+@@error  
           
           		  update tbl_trade set stockid=@stockid,color=@color,product_size=@product_size,color2=@color2  where orderno=@orderno
		   set @nror=@nror+@@error  	   
        end         
 end 
  
  /*如果原来的库存标识为全国货或者银泰的*/
 if  @oldstockid=4 or @oldstockid=5 
 begin
     /*如果新的订单库存标识为自备货*/
     if @stockid=1 or @stockid=2 or @stockid=3
      begin
      
      update tbl_productstore set number=number+@number,lock_number=lock_number-@number where product_no=@product_no and color=@oldcolor and product_size=@oldproduct_size and stockid=@oldstockid 
           set @nror=@nror+@@error
           
             update tbl_productstore set number=number-@number,lock_number=lock_number+@number where product_no=@product_no and color=@color and product_size=@product_size and stockid=@stockid 
           set @nror=@nror+@@error
          
			insert into tbl_product_inout_record
		(product_no,color,product_size,number2,stock,users,operation_type,operation,memo)
		 values (@product_no,@color,@product_size,0-@number,@stockname,@orderno+'|'+@users,'出库','修改订单',@memo_product_inout_record)    
		  set @nror=@nror+@@error
		  
		 update tbl_trade set stockid=@stockid,color=@color,product_size=@product_size,color2=@color2  where orderno=@orderno
		   set @nror=@nror+@@error  	   

      end 

     /*如果新的订单库存标识为全国货*/
     else if @stockid=4 or @stockid=5
     begin
     
      update tbl_productstore set number=number+@number,lock_number=lock_number-@number where product_no=@product_no and color=@oldcolor and product_size=@oldproduct_size and stockid=@oldstockid 
           set @nror=@nror+@@error
           
             update tbl_productstore set number=number-@number,lock_number=lock_number+@number where product_no=@product_no and color=@color and product_size=@product_size and stockid=@stockid 
           set @nror=@nror+@@error
           
           		  update tbl_trade set stockid=@stockid,color=@color,product_size=@product_size,color2=@color2  where orderno=@orderno
		   set @nror=@nror+@@error  	   
     end 
end 
      
end 
     if @nror<>0         
              begin
  set @result='失败'
                rollback transaction
              end
           else        
              begin
  set @result='成功'
                commit transaction
              end
GO


    public string chang_product(string product_no,string color,string product_size,string oldcolor,string oldproduct_size,int  stockid,int oldstockid,int number,string users,string orderno,string memo_product_inout_record)
    {
        con = new SqlConnection(shopcon);
        con.Open();
        com = new SqlCommand("change_product", con);
        com.CommandType = CommandType.StoredProcedure;
        com.Parameters.Add("@product_no",product_no );
        com.Parameters.Add("@color",color );
        com.Parameters.Add("@product_size",product_size);
        com.Parameters.Add("@oldcolor", oldcolor);
        com.Parameters.Add("@oldproduct_size",oldproduct_size);
        com.Parameters.Add("@stockid",stockid );
        com.Parameters.Add("@oldstockid",oldstockid );
        com.Parameters.Add("@number",number );
        com.Parameters.Add("@users",users );
        com.Parameters.Add("@orderno",orderno );
        com.Parameters.Add("@memo_product_inout_record",memo_product_inout_record);
        com.Parameters.Add(new SqlParameter("@result", SqlDbType.NVarChar, 30));
        com.Parameters["@result"].Direction = ParameterDirection.Output;
        com.ExecuteNonQuery();
        string result = com.Parameters["@result"].Value.ToString();
        con.Close();
        com.Dispose();
        return result;
 
    }
原文地址:https://www.cnblogs.com/xiaofengfeng/p/1945364.html