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 之后后面的代码就没了, 当然就不匹配了
相关文章推荐
- System.Data.SqlClient.SqlException (0x80131904): EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。 EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。
- EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 0,当前计数 = 1。
- 消息 266,级别 16,状态 2,过程 UserExchange,第 0 行 EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 0,当前计数 = 1。
- EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配
- SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题
- SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题
- SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题
- EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。上一计数 = 1,当前计数 = 2
- EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句
- EXECUTE后的事务计数指出缺少了COMMIT或ROLLBACK TRANSACTION语句。原计数=0,当前计数=1。
- 关于EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。上一计数
- EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句
- EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 0,当前计数 = 1。
- 处理 DB2 数据 COMMIT 和 ROLLBACK 语句和事务边界
- Sql Server 中事务(begin tran/commit tran/rollback tran)的用法
- SQL 事务 begin tran、commit tran、rollback tran 的用法
- 一个用来统计当前linux连接某个端口的IP数目的语句
- oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的Sql语句,没提交的事务,对象为哪些进程所用
- Sql Server 中事务(begin tran/commit tran/rollback tran)的用法
- yii如何使用事务,begin,commit,rollback