錯誤提示:
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的匹配數