Параметры с несколькими значениями преобразуются в список через запятую.Таким образом, вы используете это при использовании функции len:
SELECT name, collected_year, value, [order]
FROM rpt_competency_metric
WHERE ( len(2007,2008) = 0 OR collected_year IN ( 2007,2008 ) )
AND competency_id = @competency_id
, которая также объясняет вашу ошибку.Один из них может работать, но я не проверял их:
SELECT name, collected_year, value, [order]
FROM rpt_competency_metric
WHERE ( @year is null OR collected_year IN ( @year ) )
AND competency_id = @competency_id
Или:
SELECT name, collected_year, value, [order]
FROM rpt_competency_metric
WHERE ( rtrim(ltrim(convert(varchar,'@year'))) = '' OR collected_year IN ( @year ) )
AND competency_id = @competency_id
Попробуйте описать выше с одинарными кавычками и без них около @ года.
Не знаю, что делает SSRS с многозначным параметром в литеральной строке, но если он заменит его напрямую, это может сработать, что близко к тому, что у вас есть:
SELECT name, collected_year, value, [order]
FROM rpt_competency_metric
WHERE ( len('@year') = 0 OR collected_year IN ( @year ) )
AND competency_id = @competency_id