我怎样才能得到 "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 的哈希符号 (#))。
我目前正在为使用 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 的哈希符号 (#))。