В данных обстоятельствах я думаю, что ваш лучший выбор - использовать функцию MDY () вместо конкатенации строк:
SELECT prodtype, familynum, family,
sum(invested) invested,
month(recevdate) month,
year(recevdate) year,
day(recevdate) day,
'All Year' const
FROM sales_product
WHERE (region NOT IN ('15876','15852'))
AND (prodtype in ('4','7','50','1'))
AND (recevdate BETWEEN MDY(1, 1, YEAR(?) - 1) AND MDY(12, 31, YEAR(?) - 1))
GROUP BY 1,2,3,5,6,7
Я предполагаю, что?значение-заполнитель - это полное значение DATE, поэтому необходима функция YEAR.Вы можете упростить запрос, если передадите точный номер года, который вас интересует:
SELECT prodtype, familynum, family,
sum(invested) invested,
month(recevdate) month,
year(recevdate) year,
day(recevdate) day,
'All Year' const
FROM sales_product
WHERE (region NOT IN ('15876','15852'))
AND (prodtype in ('4','7','50','1'))
AND (recevdate BETWEEN MDY(1, 1, ?) AND MDY(12, 31, ?))
GROUP BY 1,2,3,5,6,7
Относительно того, почему конкатенация строк «терпит неудачу» ... это не ясно.Однако одно из преимуществ функции MDY () заключается в том, что ее аргументы однозначны и не зависят от локали (локали как клиента, так и сервера).Одной из возможных причин вашей проблемы является то, что формат даты, установленный (или не установленный) службами Reporting Services, отличается от того, который вы принудительно задаете в своем запросе, и отличается от того, который устанавливается при непосредственном выполнении запроса.Это предположение - правдоподобное, но отнюдь не окончательное предположение.Другая возможность состоит в том, что вы передаете ссылочную дату только один раз, даже если она используется дважды в условии условия запроса.Если бы мы получили сообщение об ошибке, мы могли бы лучше угадать источник проблемы.