执行事务报错:
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 之后后面的代码就没了, 当然就不匹配了