メソッド内の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.