您的位置:首页 > 其它

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

2016-08-08 10:42 309 查看


执行事务报错:


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 

解决方法:(红色[b]return   有问题)[/b]

return   --begin rean 和 commit tran , rollback tran 之间, 不可以使用 return 
应为 return 之后后面的代码就没了, 当然就不匹配了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐