SqlServer 存储过程的事务

 

 注意:在事务当中不能再开始事务

 ALTER PROCEDURE [dbo].[MyProcedure]
        @Flag               AS      INT,           
        @Column1            AS        VARCHAR(8),        
        @Column2                AS        VARCHAR(50),    
        @Column3        AS        VARCHAR(50),    
        @Column4            AS        CHAR(10),        
        @Column5            AS        TINYINT,        
        @Column6        AS        TINYINT,        
        @Column7        AS        NVARCHAR(20),    
        @Column8            AS        CHAR(2),        
        @Column9            AS        NVARCHAR(50),    
        @O_RETURN            AS        INT    OUTPUT

AS
BEGIN
    SET NOCOUNT ON
     BEGIN TRAN--------------------------开始事务
    
        UPDATE Table1
          SET Column2 = @Column2
            , Column3 = @Column3
        WHERE Column1 = @Column1
        IF @@ERROR <> 0
            GOTO errback
 
     IF @Flag = 1
        UPDATE Table2
         SET Column2 = @Column2
            , Column3 = @Column3
            , Column4 =@Column4
            , Column5 =@Column5
            , Column6 =@Column6
            , Column7 = @Column7
            , Column8 = @Column8    
            , Column9 = @Column9
        WHERE Column1 = @Column1
     ELSE
        UPDATE Table3
         SET Column2 = @Column2
            , Column3 = @Column3
            , Column4 =@Column4
            , Column5 =@Column5
            , Column6 =@Column6
        WHERE Column1 = @Column1

        IF @@ERROR <> 0 ---------因为if else 当中语句只执行一个,所以判断放在外面
            GOTO errback ----------转到执行错误的语句去;

        UPDATE Table4
        SET Column2 = @Column2
        WHERE Column1 = @Column1
        IF @@ERROR <> 0
           GOTO errback

           COMMIT TRAN   -- 提交事务
        SET @O_RETURN = 0;--返回成功标志
        RETURN  --必须 return 掉,否则会执行下面的 errback:当中的代码
        errback: --处理错误
            ROLLBACK TRAN --回滚事务
            SET @O_RETURN= 1;
            RETURN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值