解决 “EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 ”

21 篇文章 3 订阅
10 篇文章 0 订阅

错误提示:

EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 0,当前计数 = 1。

 

错误原因:

BEGIN 看成计数开始点

COMMIT 和R OLLBACK  看成计数结束点 

每个计数 开始点 和 结束点 要成对匹配

 

情况分析

1. BEGIN 和 COMMIT 中间有RETURN的存在 , 后面的COMMIT(ROLLBACK)不会被执行,所以数目不匹配

Select @rval = 0
BEGIN TRANSACTION

    Insert Into USERS(name , age) VALUES( @name , @age)
    if @@error <> 0
    BEGIN
        Select @rval = -1
        return -- 错误示例:这里返回后,下面的代码不会被执行,最后的COMMIT会引起不匹配
    END

    Insert Into company(address , tel) values(@address , @tel)
    if @@error <> 0
    BEGIN
        Select @rval = -2
        return -- 错误示例:这里返回后,下面的代码不会被执行,最后的COMMIT会引起不匹配
    END
COMMIT TRANSACTION

 

 

2.COMMIT前有ROLLBACK , 执行了ROLLBACK 后不使用RETURN,继续执行后面代码中如果有COMMIT数目也不匹配。

Select @rval = 0
BEGIN TRANSACTION

    Insert Into USERS(name , age) VALUES( @name , @age)
    if @@error <> 0
    BEGIN
        Select @rval = -1       
    END

    Insert Into company(address , tel) values(@address , @tel)
    if @@error <> 0
    BEGIN
        Select @rval = -2
        ROLLBACK TRANSACTION
        return -- 因为上面一行代码使用了ROLLBACK,已经结束了和前面BEGIN的匹配,所以继续执行下去的COMMIT会造成不匹配,所以这里必须使用return 不执行最后的COMMIT
    END
COMMIT TRANSACTION

 

解决方法:

1. 只有 BEGIN 与 COMMIT , 中间没有ROLLBACK,那么BEGIN和COMMIT之间不能用 RETURN

2. 如果使用了ROLLBACK回滚事务,要检查BEGIN的匹配数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值