【问题标题】:How to translate "Any()" and "All()" to DB2 SQL query?如何将“Any()”和“All()”转换为 DB2 SQL 查询?
【发布时间】:2014-07-02 08:58:55
【问题描述】:

我是 DB2 领域的新手,正在使用: - 用于 .NET 的 DB2 数据提供程序(IBM.Data.DB2.dll 版本 9.7.4.4) - C# VS2010 与 .NET Framework 4.0

  1. 我正在尝试翻译以下 C# 查询语句:
TestQuery(() => db.Customers.Any());

到 (DB2) SQL 查询:

  SELECT CASE WHEN (EXISTS(
  SELECT NULL 
  FROM "CUSTOMERS" t0
  )) THEN 1 ELSE 0 END AS "value"

上面的查询可以在MS SQL 无故障上运行。但 DB2 不接受该查询 并引发 ERROR [42601] [IBM][DB2/NT64] SQL0104N

  1. “All()”也遇到同样的问题
TestQuery(() => db.Customers.All(c => c.ContactName.StartsWith("a")));

(DB2) SQL 查询:

  SELECT CASE WHEN (NOT (EXISTS(
  SELECT NULL 
  FROM "CUSTOMERS" t0
  WHERE NOT ((t0."CONTACTNAME" LIKE :p0 || '%'))
  ))) THEN 1 ELSE 0 END AS "value"

我的问题:如何正确地将“Any()”和“All()”转换为 DB2 SQL 查询?
非常感谢任何帮助和提示。提前谢谢。

【问题讨论】:

    标签: c# sql database db2


    【解决方案1】:

    在 DB2 中 SELECT 必须是 FROM 的东西。您可以使用始终有 1 行的系统表 SYSIBM.SYSDUMMY1

    SELECT CASE WHEN (EXISTS(
     SELECT NULL 
     FROM "CUSTOMERS" t0
    )) THEN 1 ELSE 0 END AS "value"
    FROM SYSIBM.SYSDUMMY1
    

    或使用VALUES 声明:

    VALUES
    CASE WHEN (EXISTS(
     SELECT NULL 
     FROM "CUSTOMERS" t0
    )) THEN 1 ELSE 0 END AS "value"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多