不能在 INSERT-EXEC 语句内部使用 ROLLBACK 语句 的解决办法

转自:http://www.6ideas.cn/ArtF/40334_91.html

两个存储过程test1和test2,在TEST1的事务里面调用TEST2(EXEC TEST2),TEST2里面也有事务,当TEST2里面的事务执行ROLLBACK时,就会报错
“消息
3915,级别 16,状态 0,过程 IMS_TJZZJYJEQ1,第 100 行,不能在 INSERT-EXEC 语句内部使用 ROLLBACK 语句。”,
原因是运行到存储过程TEST2时,有两个事务,当执行ROLLBACK时就会出错,因为TEST2是通过EXEC的方式执行的。

CREATE PROC p1
AS
   
-- 初始化事务和返回值设置
    DECLARE
       
@Trancount int,
       
@re int
   
SELECT
       
@re = 0,
       
@Trancount = @@ROWCOUNT
   
   
-- 如果外层(调用者)无事务, 则直接开启事务, 否则保存事务点(这样后面可以根据情况做事务处理)
    IF @Trancount = 0
       
BEGIN TRAN
   
ELSE
       
SAVE TRAN TRAN_Save_Point

   
---.... 你的处理
    -- 在可能出错的语句后面应该包括类似这样的错误处理语句
    IF @@ERROR <> 0
       
GOTO lb_Error


-- 成功提交事务
lb_Succeed:   
   
IF @Trancount = 0
       
COMMIT TRAN
   
GOTO lb_Return

-- 失败回滚事务
lb_Error:
   
IF @Trancount = 0
       
ROLLBACK TRAN
   
ELSE
       
ROLLBACK TRAN TRAN_Save_Point
   
SET @re = -1

-- 退出处理
lb_Return:
   
RETURN @re

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值