zoukankan      html  css  js  c++  java
  • 事务的使用

    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  



  • 相关阅读:
    oracle 聚合函数 LISTAGG ,将多行结果合并成一行
    oracle 数据库对于多列求最大值
    Java 简单的rpc 一
    centos7 安装php7
    win10下VM 中centos 安装共享文件
    CentOS7 cannot find a valid baseurl for repo base
    分布式事务
    利用虚拟映射文件加密大文件
    动态代理
    c++ 11 lambda表达式
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1531317.html
Copyright © 2011-2022 走看看