Java 在sybase中提交事务的临时表
我正在使用sybase临时表方法表名进行批量插入。这在事务中发生。但是,此操作正在提交数据事务。我没有做任何连接。请承诺。我不希望发生这种提交,因为我以后可能不得不回滚整个事务。知道为什么insert using temp table在提交事务时会被询问吗?。如何解决此问题 sql有点像Java 在sybase中提交事务的临时表,java,sql,sybase,Java,Sql,Sybase,我正在使用sybase临时表方法表名进行批量插入。这在事务中发生。但是,此操作正在提交数据事务。我没有做任何连接。请承诺。我不希望发生这种提交,因为我以后可能不得不回滚整个事务。知道为什么insert using temp table在提交事务时会被询问吗?。如何解决此问题 sql有点像 select * into #MY_TABLE_BUFFER from MY_TABLE where 0=1; load table #MY_TABLE_BUFFER from 'C:\temp\123.tm
select * into #MY_TABLE_BUFFER from MY_TABLE where 0=1;
load table #MY_TABLE_BUFFER from 'C:\temp\123.tmp' WITH CHECKPOINT ON;
insert into MY_TABLE on existing update select * from #MY_TABLE_BUFFER;
drop table #MY_TABLE_BUFFER;
我使用statement.executeUpdate来执行它
发现这是由于临时表未参与事务并执行提交。
有什么解决方法吗?Sybase很有趣,它将用户指定的aka显式事务与临时表结合使用,而临时表是在事务中创建的。不管是好是坏,Sybase认为创建临时表(包括通过“select into”语句)是tempdb上下文中的DDL语句。在编辑器中,w/default server/db settings,执行此操作时将出现错误 作为测试,您可以尝试将tempdb数据库上下文中的“ddl in tran”设置设置为true。然后,查看行为是否发生变化 但是,请注意,根据Sybase文档,永久保留该设置是一个坏主意。我只是为了调查的目的才提出来的
如果我对问题的假设是正确的,那么真正的解决方案可能是首先创建临时表,然后开始事务,避免事务范围内的任何DDL STMT。Sybase很有趣,它将用户指定的aka显式事务与临时表结合使用,在事务中创建临时表的地方使用临时表。不管是好是坏,Sybase认为创建临时表(包括通过“select into”语句)是tempdb上下文中的DDL语句。在编辑器中,w/default server/db settings,执行此操作时将出现错误 作为测试,您可以尝试将tempdb数据库上下文中的“ddl in tran”设置设置为true。然后,查看行为是否发生变化 但是,请注意,根据Sybase文档,永久保留该设置是一个坏主意。我只是为了调查的目的才提出来的
如果我对问题的假设是正确的,那么真正的解决方案可能是首先创建临时表,然后开始事务,以避免事务范围内的任何DDL stmt。sp_dboption tempdb,'DDL in tran',true
上述方法可以工作,即使是在使用anymode创建proc时,我也无法创建/更新表。sp_dboption tempdb,'ddl in tran',true
以上都可以工作,即使我也无法在使用anymode创建proc时创建/更新表。请向我们展示一些代码并正确设置其格式。您是否设置为false?您说您使用statement.executeUpdate。你从其他代码中调用它吗?例如,来自Java?@cularis。对设置为false。@尼瓦斯是的。从java代码中请给我们看一些代码并正确格式化。您是否设置为false?您说您使用statement.executeUpdate。你从其他代码中调用它吗?例如,来自Java?@cularis。对设置为false。@尼瓦斯是的。来自java代码