我对方法中的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 应该关闭链接?
我遇到这个的原因如下:
我正在编写一个 Java 应用程序,它需要执行一些复杂的 SQL 并在其中任何一个失败时回滚所有这些:
使用打开 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.