我怎样才能得到 "select into" 语句来使用 H2

How can I get "select into" statement to work with H2

我目前正在为使用 sybase 数据库的现有 java/spring 项目创建回归测试。我被要求为测试旋转一个 H2 数据库,运行 现有的查询来测试结果。

总而言之,代码调用真实的、现有的 API,但将 H2 数据库作为数据库源而不是 sybase 传递(通过使用

-DdbServer=tcp:[host]:[port]/./testDatabase

调用托管代码的 spring 应用程序时。

我面临的问题是 API 调用的几个现有 sql 查询使用 select COLUMNS into #tempTable,不幸的是 H2 似乎不支持它。

我的问题是:我该如何解决这个问题?我可以在 sybase 和 H2 都支持的查询中使用另一个等效命令吗?有没有办法围绕 H2 数据库创建包装器,以便它可以捕获“select into”语句并将其更改为 H2 支持的语句?

我在网上看过,但找不到任何东西。我知道 H2 支持 create table NewTable as SELECT 但不幸的是 Sybase 不支持,我特别需要 相同的 SQL 查询 才能为两者工作。

我们将不胜感激任何帮助!

这就是我最后做的事情:

我将 sql 从

更改为
select columns 
into #tempTable 
from OtherTable 

至:

create #tempTable(columns columnsType)

insert into #tempTable(columns)
  select (columns) from OtherTable

这受 H2 和 Sybase 的支持,似乎不会影响性能。这有点烦人,因为您必须为新 table 创建所有列,否则更改非常简单。

潜在的问题是 H2 需要在 create 语句末尾使用分号,而 Sybase 不需要,所以我通过创建自定义 JdbcOperations class 来解决这个问题,它只在以下情况下被调用使用 H2 并在处理查询之前添加分号(我还必须使用它来处理 Sybase 用来创建临时 tables 的哈希符号 (#))。