我对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?
我遇到这个问题的原因如下:
我正在编写一个Java应用程序,它需要执行一些复杂的SQL并在其中任何一个失败时回滚所有这些:
使用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.
答案 0 :(得分:2)
我遇到了几乎相同的问题,并通过运行以下SQL来解决它。希望它可以帮助你。
sp_procxmode your_stored_Procedure, 'anymode'
在你的情况 your_stored_Procedure = MySP1 ,那么你应该运行以下代码:
sp_procxmode MySP1, 'anymode'
答案 1 :(得分:0)
以防万一在漫长的7年后有人来这里,
我通过
使它起作用connection.setAutoCommit(false); // this is mandatory, as without it jTDS will commit each statement.
在Java中,并显式执行SQL代码:
SET CHAINED OFF
begin transaction