Надеюсь, кто-то найдет это полезным:
Использование объединения - лучший способ использования многозначного параметра. Но что, если вы хотите иметь эффективный вариант «Выбрать все»? Если есть 100s +, то запрос будет очень неэффективным.
Чтобы решить эту проблему, вместо использования SQL-запроса как есть, измените его на выражение (нажмите кнопку Fx в правом верхнем углу), а затем создайте запрос примерно так (необходимы речевые метки):
= "Select * from tProducts Where 1 = 1 "
IIF(Parameters!ProductID.Value(0)=-1,Nothing," And ProductID In (" & Join(Parameters!ProductID.Value,"','") & ")")
В вашем параметре сделайте следующее:
SELECT -1 As ProductID, 'All' as ProductName Union All
Select
tProducts.ProductID,tProducts.ProductName
FROM
tProducts
Построение запроса как выражения означает, что вы можете сделать оператор SQL более эффективным, но также справиться с трудностями, с которыми SQL Server сталкивается при обработке значений в операторе «In».