1

メソッド内のset chainedステートメントと混乱していますsetAutoCommit()net.sourceforge.jtds.jdbc.Driver

ソースコードは次のように述べています。

2161  if (serverType == Driver.SYBASE) {
2162            if (autoCommit) {
2163                sql.append("SET CHAINED OFF");
2164            } else {
2165                sql.append("SET CHAINED ON");
2166            }

しかし、それは逆で、連鎖は autoCommit==false に対して OFF にすべきではないでしょうか?


私がこれに遭遇した理由は次のとおりです。

複雑な SQL を実行し、いずれかが失敗した場合はすべてロールバックする必要がある Java アプリを作成しています。

  • を使用してSybase接続を開きますnet.sourceforge.jtds.jdbc.Driver

  • setAutoCommit(false) を呼び出す

  • SQL1 を行う

  • ストアド プロシージャ 'MySP1' を呼び出す

    • ストアド プロシージャ MySP1' は私の管理下にありません

    • それは持っていますEXEC sp_procxmode 'dbo.MySP1','unchained'

  • SQL2 を行う

  • SQL2 が失敗した場合は、すべて (SQL1 を含む) をロールバックし、それ以外の場合はコミットします。

これを行うと、MySP1 から次のエラーが表示されます。

 Stored procedure 'MySP1' may be run only in unchained transaction mode. The 'SET CHAINED OFF' command will cause the current session to use unchained transaction mode.
4

2 に答える 2

2

私はほぼ同じ問題を抱えていて、次のSQLを実行して解決しました。うまくいけば、それはあなたを助けることができます.

sp_procxmode your_stored_Procedure, 'anymode'

あなたの場合your_stored_Procedure = MySP1の場合、次のコードを実行する必要があります。

 sp_procxmode MySP1, 'anymode'
于 2013-05-22T09:44:22.250 に答える