错误提示:
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的匹配数