Как перевести «Any()» и «All()» в SQL-запрос DB2?

#c# #sql #database #db2

#c# #sql #База данных #db2

Вопрос:

Я новичок в мире DB2 и использую: — DB2 Data Provider для .NET (IBM.Data.DB2.dll версия 9.7.4.4) — C # VS2010 с .NET Framework 4.0

  1. Я пытаюсь перевести следующую инструкцию запроса C #:
 TestQuery(() => db.Customers.Any());
  

в SQL-запрос (DB2):

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

Приведенный выше запрос работает на MS SQL без проблем. Но DB2 не принимает этот запрос и выдает ОШИБКУ [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()» в SQL-запрос DB2?
Любая помощь и подсказки высоко ценятся. Заранее спасибо.

Ответ №1:

В DB2 SELECT должно быть FROM что-то. Вы могли бы использовать системную таблицу SYSIBM.SYSDUMMY1 , в которой всегда есть 1 строка:

 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"