Я запускаю этот запрос на SQL Server 2008 с использованием ODBC. Если я уберу последнюю часть (ИЛИ li.DATEGENERATED >= (...))), тогда я не получу ошибку... но я могу просто запустить ее в SSMS.
SELECT COUNT(*) FROM dbo.POITEMST li
WHERE (? IS NULL OR li.DATEGENERATED >= ?)
AND (? IS NULL OR (li.DATEGENERATED >= (
SELECT MAX(t.DATEGENERATED) FROM dbo.POITEMST t WHERE t.PONUM = ?)))
Вот как я устанавливаю параметры
DbParameter startDateParam = cmd.CreateParameter();
startDateParam.ParameterName = "StartDate";
startDateParam.Value = (StartDate.HasValue ? (object)StartDate.Value : (object)(new DateTime(1753, 2, 2)));
cmd.Parameters.Add(startDateParam);
startDateParam = cmd.CreateParameter();
startDateParam.ParameterName = "StartDate";
startDateParam.Value = (StartDate.HasValue ? (object)StartDate.Value : (object)(new DateTime(1753, 2, 2)));
cmd.Parameters.Add(startDateParam);
DbParameter startPoParam = cmd.CreateParameter();
startPoParam.ParameterName = "StartPO";
startPoParam.DbType = DbType.String;
startPoParam.Value = (string.IsNullOrEmpty(StartPurchaseOrder) ? (object)DBNull.Value : (object)StartPurchaseOrder);
cmd.Parameters.Add(startPoParam);
startPoParam = cmd.CreateParameter();
startPoParam.ParameterName = "StartPO";
startPoParam.DbType = DbType.String;
startPoParam.Value = (string.IsNullOrEmpty(StartPurchaseOrder) ? (object)DBNull.Value : (object)StartPurchaseOrder);
cmd.Parameters.Add(startPoParam);
РЕДАКТИРОВАТЬ: эти даты указаны только там, потому что я пытался понять это... раньше он проходил в DBNull, если не было даты начала.