#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
- Я пытаюсь перевести следующую инструкцию запроса 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
- Я получаю ту же проблему для «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"