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

执行事务报错:

Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0

翻译:

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



存储过程示例:

USE [ZCJ20_DB]

GO
/****** Object:  StoredProcedure [dbo].[a_Save_AdminAuditAuthorInvestor]    Script Date: 08/08/2016 09:31:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
Desc:管理员审核专栏作者认证信息
Author:LHB
UpdateDate:2016-05-03 09:42:19.187
*/
ALTER PROCEDURE [dbo].[a_Save_AdminAuditAuthorInvestor]
@UserID INT
,@UpdateUserID INT
,@RealName nvarchar(20)
,@UserPhotos nvarchar(500)
,@UserPDL NVARCHAR(500)
,@Remark NVARCHAR (500)
,@AuditStatus INT
,@IsStarAuthor INT
,@msg nvarchar(200) output
AS 
SET @msg ='error:';
--判断是否存在专栏用户提交的申请(5:申请中;审核通过)
BEGIN TRANSACTION 
BEGIN TRY
IF exists(select * from a_usr_AuthorOAth WITH (NOLOCK) where UserID=@UserID AND (AuditStatus=5 OR AuditStatus=15))
BEGIN 
UPDATE  a_usr_AuthorOAth  SET 
 [Remark] = @Remark
 ,[AuditStatus]=@AuditStatus
 ,[IsStarAuthor] = @IsStarAuthor
 ,[UpdateUserID]=@UpdateUserID
 ,[UpdateDate]=GETDATE()
where UserID =@UserID;
--假如审核成功,转移数据到a_usr_UserExpand(15:审核通过)
IF (@AuditStatus=15)
BEGIN

--假如用户表中存在用户则修改并认证专栏用户信息,否则插入信息
IF exists(select * from a_usr_UserExpand WITH (NOLOCK) WHERE  uid=@UserID)

BEGIN 
UPDATE  a_usr_UserExpand  SET 
 [RealName]=@RealName
 ,[UserPhotos]=@UserPhotos
 ,[UserPDL]=@UserPDL
 ,[UserType] =2 --2:用户专栏认证类型
 ,[UpdateUserID]=@UpdateUserID
 ,[UpdateDate]=GETDATE()
WHERE  uid=@UserID;

END 
ELSE
BEGIN
INSERT INTO a_usr_UserExpand(
uid,
[RealName],
[UserPhotos],
[UserPDL],
[UserType],
[UpdateUserID],
[UpdateDate],
[CreatedUserID],
[CreateDate])
VALUES (
@UserID,
@RealName,
@UserPhotos,
@UserPDL,
2,--2:用户专栏认证类型
@UpdateUserID,
GETDATE(),
@UpdateUserID,        
GETDATE());
END

END
SET @msg = CAST( @UserID AS NVARCHAR(100));
END 
ELSE 
BEGIN
SET @msg='error:用户专栏信息没有提交审核,<br/>暂时无法保存或提交审核.<br/>请等待用户提交审核.'
RETURN;

END
END TRY


BEGIN CATCH
SELECT @msg='error:.' +ERROR_MESSAGE();
END CATCH


IF CHARINDEX('error:',@msg) = 0
--成功了!
BEGIN
COMMIT TRANSACTION;
END
ELSE
--出错了!
BEGIN
ROLLBACK TRANSACTION; 
END 



解决方法:(红色return   有问题

return   --begin rean 和 commit tran , rollback tran 之间, 不可以使用 return 
应为 return 之后后面的代码就没了, 当然就不匹配了





  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值