0

ストアド プロシージャを実行すると、SQL Server 2005 から次のメッセージが表示されることがあります。

原因: com.microsoft.sqlserver.jdbc.SQLServerException: T1 をロールバックできません。その名前のトランザクションまたはセーブポイントは見つかりませんでした。
    com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError (不明なソース) で
    com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult (不明なソース) で
    com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement (不明なソース) で
    com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute (不明なソース) で
    com.microsoft.sqlserver.jdbc.TDSCommand.execute (不明なソース) で
    com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand (不明なソース) で
    com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand (不明なソース) で
    com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement (不明なソース) で
    com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate (不明なソース) で
    com.mchange.v2.c3p0.impl.NewProxyCallableStatement.executeUpdate (NewProxyCallableStatement.java:2160) で
    com.sm.persistence.dao.TransactionRejectDAO.callSpMoveTransaction (TransactionRejectDAO.java:631) で
    ... 6 つ以上

何か案は?

接続プーリング メカニズムが準備済みステートメントを閉じようとすると、次のようになります。

2009 年 11 月 9 日 9:32:55 AM com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement クローズ
警告: SQLServerPreparedStatementID:201 ( ConnectionID:139 TransactionID:0x1A00000039000000): エラー (無視) PreparedHandle:0 を閉じています
com.microsoft.sqlserver.jdbc.SQLServerException: サーバーはトランザクションを再開できませんでした。説明:390000001a.
    com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError (不明なソース) で
    com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF (不明なソース) で
    com.microsoft.sqlserver.jdbc.TDSParser.parse (不明なソース) で
    com.microsoft.sqlserver.jdbc.TDSParser.parse (不明なソース) で
    com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$1PreparedHandleClose.doExecute (不明なソース) で
    com.microsoft.sqlserver.jdbc.TDSCommand.execute (不明なソース) で
    com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand (不明なソース) で
    com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand (不明なソース) で
    com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.closePreparedHandle (不明なソース) で
    com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.close (不明なソース) で
    com.mchange.v1.db.sql.StatementUtils.attemptClose (StatementUtils.java:41) で
    com.mchange.v2.c3p0.stmt.GooGooStatementCache.synchronousDestroyStatement (GooGooStatementCache.java:413) で
    com.mchange.v2.c3p0.stmt.GooGooStatementCache.closeAll (GooGooStatementCache.java:351) で
    com.mchange.v2.c3p0.impl.NewPooledConnection.closeAllCachedStatements (NewPooledConnection.java:673) で
    com.mchange.v2.c3p0.impl.NewPooledConnection.close (NewPooledConnection.java:543) で
    com.mchange.v2.c3p0.impl.NewPooledConnection.close (NewPooledConnection.java:234) で
    com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource (C3P0PooledConnectionPool.java:470) で
    com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run (BasicResourcePool.java:964) で
    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run (ThreadPoolAsynchronousRunner.java:547) で
2009 年 11 月 9 日 9:32:55 AM com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement クローズ
警告: SQLServerPreparedStatementID:186 ( ConnectionID:139 TransactionID:0x1A00000039000000): エラー (無視) PreparedHandle:0 を閉じています

ストアド プロシージャには、不要と思われるネストされたトランザクション T1 が含まれています。それが問題でしょうか?

ありがとう

4

2 に答える 2

1

最初のエラーは、ロールバックしようとしている名前付きのネストされたトランザクションがあるという事実によるものです-ネストされたトランザクションの名前付け(名前付けは「BEGINTRANSACTION」のようなものを入力することを意味します。この場合は= T1)は許可されていますが、ローリング名前付きのネストされたトランザクションに戻ることはサポートされておらず、エラーが発生します。

詳細については、このトピックを参照してください。

于 2009-11-09T20:53:57.313 に答える
1

ネストされたトランザクションをロールバックする必要がある場合は、SAVE トランザクションを使用できます。ここを参照

于 2012-08-22T10:17:47.923 に答える