如何翻译" Any()"和"所有()"到DB2 SQL查询?

时间:2014-07-02 08:58:56

标签: c# sql database db2

我是DB2世界的新手,正在使用: - DB2 Data Provider for .NET(IBM.Data.DB2.dll版本9.7.4.4) - 使用.NET Framework 4.0的C#VS2010

  1. 我正在尝试翻译以下C#查询语句:
  2. 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()"
    2. ,我也遇到同样的问题
      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()"和"所有()"正确地进行DB2 SQL查询?
      任何帮助和提示都非常感谢。 Thx提前。

1 个答案:

答案 0 :(得分: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"