【问题标题】:If-Else condition in H2 database queryH2数据库查询中的If-Else条件
【发布时间】:2016-06-15 03:16:12
【问题描述】:

我有一个连接器应用程序,它使用 apache camel 从第三方数据库中读取数据。我正在尝试使用 H2 数据库模拟相同的数据库和查询操作,因此测试不需要连接到第三方数据库。 该数据库位于 MS SQL Server 中。我在我的 H2 数据库中使用模式作为 SQLServer。但是,我有一个带有 if-else 条件的 mssql 查询。当我尝试执行它时,我收到以下错误。

MSSQL 查询是

if((SELECT count(*) from Employee where DateCreated < '2016-02-02 00:05:00')>1)
    SELECT TOP 10 * from Employee where DateCreated < '2016-02-02 00:05:00'
  else
    SELECT TOP 1 * from Employee where DateCreated < '2016-02-02 00:05:00'

错误信息:

Exception in thread "main" org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "  IF[*]((SELECT COUNT(*) FROM EMPLOYEE)>1)
    SELECT TOP 10 * FROM EMPLOYEE
  ELSE
    SELECT TOP 1 * FROM EMPLOYEE "; expected "INSERT, {"; SQL statement:
  if((SELECT count(*) from Employee)>1)
    SELECT TOP 10 * from Employee
  else
    SELECT TOP 1 * from Employee [42001-185]

我假设 H2 数据库不支持条件查询。无论如何,我可以在 H2 中执行相同的查询吗? 最坏的情况,有没有其他方法可以更改与 H2 兼容的 mssql 查询?

【问题讨论】:

  • 实际查询过大,这里就不贴了。如果条件匹配,我们需要执行一个查询,否则执行一个不同的查询。为了测试这个场景,我简单地创建了一个简单的查询。

标签: sql-server scala h2


【解决方案1】:

我认为没有。您可以在 H2 中使用 case 命令来实现 if/else 效果,并且在您的应用程序中可以考虑进入条件和/或语句以执行的代码,以便您编写它并在您的 ms sql 和h2 请求。

【讨论】:

  • 你能详细说明一下吗? H2 语法是 CASE WHEN 表达式 THEN 表达式 ELSE 表达式 END 问题是如何做 CASE WHEN 表达式 THEN 语句 ELSE 语句 END
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
相关资源
最近更新 更多