代码之家  ›  专栏  ›  技术社区  ›  Chris Ballance

SQLException-事务开始/提交不匹配

  •  6
  • Chris Ballance  · 技术社区  · 14 年前

    我仔细检查了存储过程,它正好有一个 TRANSACTION BEGIN 和回应 TRANSACTION END

    SqlException - Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0.  The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION. - Delete failed - stack:    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)     at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)     at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)     at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)     at System.Data.SqlClient.S ... [Rest of stack trace truncated by logging system]`
    

    附加信息

    存储过程不包含 EXEC

    更新 结果发现嵌套存储过程中存在违反外键约束的情况。外部事务不包括Try/Catch块,并且 SET XACT_ABORT ON 已指定,但未正确处理提交或回滚。在尝试回滚之前,还添加了对@TransactionCount>0的检查

    5 回复  |  直到 14 年前
        1
  •  14
  •   Remus Rusanu    14 年前

    是的,会的。每次开始递增 @@trancount

        2
  •  6
  •   Conrad Frix    14 年前

    你确定没有生成此的路径吗

    BEGIN TRAN
    
    ROLLBACK TRAN
    
    COMMIT TRAN
    
        3
  •  2
  •   Mike Forman    14 年前

    是的,你走的路是对的。如果嵌套过程调用创建事务,它们会影响调用过程。

    检查其他程序

        4
  •  1
  •   seguso    10 年前

     return
     commit
    

    代替

     commit
     return
    

    对我来说,这就是问题所在。

        5
  •  0
  •   yonsk    11 年前

    将此添加到过程创建文本的顶部

    将XACT\u ABORT设置为ON;

    它将确保如果没有执行任何操作,事务将完全中止。

    MSDN文件: http://technet.microsoft.com/en-us/library/ms188792(v=sql.105).aspx