SqlServer 中开启分布式事务

USE [UnipsCenterQueue]
GO
/****** Object:  StoredProcedure [dbo].[up_CancelMemberOrderByMainAndMiddle]    Script Date: 05/27/2014 16:45:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        zjc
-- Create date: 2014-05-27
-- Description:    取消主服务器以及中间库的订单
-- =============================================
ALTER PROCEDURE [dbo].[up_CancelMemberOrderByMainAndMiddle]
    @OrderID INT ,
    @CancelMemo NVARCHAR(100) ,
    @CancelOperator INT ,
    @SaleOrderCode VARCHAR(200) ,
    @MemberNO VARCHAR(20)
AS 
    BEGIN
    
        DECLARE @Result INT
        SET xact_abort ON    --必须添加该语句
        BEGIN  TRANSACTION
        --取消生产环境的订单
        
        EXEC @Result = SRV_118.UnipsCenter.dbo.up_CancelMemberOrder @OrderID,
            @CancelMemo, @CancelOperator    
        IF @@ERROR<>0 GOTO ErrorHandler
        IF @Result >= 0 
            BEGIN
                --记录订单取消日志
                EXEC up_CancelMemberOrderStatusLog @MemberNO, @SaleOrderCode
        
                --取消中间库的订单
                EXEC @Result = up_CancelMemberOrderQueue @MemberNO,
                    @SaleOrderCode
                IF @@ERROR<>0 GOTO ErrorHandler   
                SELECT @Result
            END
        ELSE 
            BEGIN
                IF @Result = -1 
                    RETURN -2 --区分@Result中的值,@Result包含三种值,-10,-200
                ELSE 
                    SELECT @Result
            END
        COMMIT TRANSACTION    
        RETURN 0
        ErrorHandler:
        ROLLBACK TRANSACTION
        RETURN -200
    END

 

posted @ 2014-05-27 17:53  超级塞亚人  阅读(720)  评论(0)    收藏  举报