事务的使用

本文介绍了一个用于处理订单状态变更的SQL存储过程,包括商品数量更新及订单状态更改。该过程支持发货和退货两种操作,并确保了数据一致性。
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[Pc_DeliverGoods]
@OutID INT 
= NULL output, 
@cmd varchar(
10= null
@CompanyOrderCode varchar(
50= null,
@IsConfirm varchar(
10)=null
AS 

IF @cmd 
= 'DeliverGoods' 
   BEGIN 
      BEGIN TRAN 
        
--更新Pdt_Price表中的订购商品的数量
       ;WITH OrderPriceIdInfo 
as (SELECT PriceId,Num FROM Pdt_Order WHERE CompanyOrderCode=@CompanyOrderCode)
       Update [Product]..[Pdt_Price] 
set Reserve = Reserve-b.Num from (select PriceId,Num from OrderPriceIdInfo) b 
       WHERE [Product]..[Pdt_Price].PriceId 
in (select PriceId from OrderPriceIdInfo);

        
--更新Pdt_Detail表中的订购商品的数量
       WITH OrderPdtIdInfo 
as (SELECT PdtId,sum(Num) as Num FROM Pdt_Order WHERE CompanyOrderCode=@CompanyOrderCode group by PdtId)
       Update [Product]..[Pdt_Detail] 
set ReserveNum = ReserveNum-b.Num from (select PdtId,Num from OrderPdtIdInfo) b 
       WHERE [Product]..[Pdt_Detail].PdtId 
in (select PdtId from OrderPdtIdInfo);
        
        
--更新订单状态
        UPDATE [CO_Orde] SET IsConfirm 
=@IsConfirm,SendDate=getdate() WHERE CompanyOrderCode=@CompanyOrderCode
      SET @OutID
=0

     IF @@ERROR
!=0 
        BEGIN 
            SET @OutID 
= -1 
            ROLLBACK 
         END 
      ELSE 
         BEGIN 
            COMMIT 
        END 
    END 

ELSE IF @cmd 
= 'BackGoods'
   BEGIN 
      BEGIN TRAN 
        
--更新Pdt_Price表中的订购商品的数量
       ;WITH OrderPriceIdInfo 
as (SELECT PriceId,Num FROM Pdt_Order WHERE CompanyOrderCode=@CompanyOrderCode)
       Update [Product]..[Pdt_Price] 
set Reserve = Reserve+b.Num from (select PriceId,Num from OrderPriceIdInfo) b 
       WHERE [Product]..[Pdt_Price].PriceId 
in (select PriceId from OrderPriceIdInfo);

        
--更新Pdt_Detail表中的订购商品的数量
       WITH OrderPdtIdInfo 
as (SELECT PdtId,sum(Num) as Num FROM Pdt_Order WHERE CompanyOrderCode=@CompanyOrderCode group by PdtId)
       Update [Product]..[Pdt_Detail] 
set ReserveNum = ReserveNum+b.Num from (select PdtId,Num from OrderPdtIdInfo) b 
       WHERE [Product]..[Pdt_Detail].PdtId 
in (select PdtId from OrderPdtIdInfo);
        
        
--更新订单状态
        UPDATE [CO_Orde] SET IsConfirm 
=@IsConfirm WHERE CompanyOrderCode=@CompanyOrderCode
      SET @OutID
=0

     IF @@ERROR
!=0 
        BEGIN 
            SET @OutID 
= -1 
            ROLLBACK 
         END 
      ELSE 
         BEGIN 
            COMMIT 
        END 
    END  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值