【发布时间】:2019-01-02 12:48:18
【问题描述】:
我的 sql 查询由 5 个部分组成,这些部分相互高度连接。第一部分创建一个临时表,第二部分使用该临时表并创建另一个临时表,第三部分使用在第二部分中创建的临时表并再次创建另一个临时表。第 4 部分从第 3 个临时表中选择一些数据,第 5 部分选择第 3 个临时表的计数。
由于临时表只能在preparedStatement中使用(我的意思是由preparedStatement创建的临时表不能从另一个preparedStatement中使用,我在没问题之前尝试过)我需要在prepare语句中这样做.
所以前 3 部分创建临时表,因为在将参数设置为preparedStatement 之后,我运行preparedStatement.execute() 3 次(我也尝试了1....x 次),然后我运行preparedStatement.execute() 但是它返回 false ,这意味着没有结果集。这是为什么?
PreparedStatement preparedStatement = conn.prepareStatement("select * into #tmp from tablex where ...\n" +
" select * into #tmp2 from #tmp where ...\n" +
" select * into #tmp3 from #tmp2 where ...\n" +
" select * from #tmp3\n" +
" select count(*) from #tmp3");
在上面,我添加了一个简单的插图。在这里,我需要使用准备好的语句获取第 4 次和第 5 次查询的结果。我该怎么做?
【问题讨论】:
-
请添加相关代码和查询。
-
@Arnaud 由于机密性,我不能这样做,但我正在添加一个简单的插图。
-
请仔细阅读
execute()的API文档,了解false的含义。您尚未考虑第一个查询产生的更新计数。 -
@JollyRoger 在尝试之前您是否禁用了自动提交?
标签: java sql-server jdbc temp-tables