Вы можете создать параметр (фильтр) в своем отчете, который будет принимать числа, разделенные ,
или каким-либо другим символом. Этот параметр будет строкой и будет выглядеть следующим образом:
В процедуре SQL эти значения разделяются с использованием функции SPLIT_STRING
.
Вот простой пример.
CREATE TABLE #Numbers ( Num INT )
INSERT INTO #Numbers (Num) VALUES(1)
INSERT INTO #Numbers (Num) VALUES(2)
INSERT INTO #Numbers (Num) VALUES(3)
INSERT INTO #Numbers (Num) VALUES(4)
INSERT INTO #Numbers (Num) VALUES(5)
Задача состоит в том, чтобы выбрать некоторые значения из таблицы #Numbers
. Можно выбрать следующие значения:
DECLARE @MyValues CHAR(100) = '1, 3, 5, 7'
В вашем примере @MyValues
является параметром отчета.
Эти значения будут разделены:
DECLARE @Separator CHAR = ','
Следующий шаг - разделить @MyValues
и сохранить их:
CREATE TABLE #SplitValues ( NumValues INT )
INSERT INTO #SplitValues
SELECT TRIM(Value) FROM STRING_SPLIT(@MyValues, @Separator)
Последний шаг - выбрать @MyValues
из таблицы #Numbers
:
SELECT * FROM #Numbers
WHERE
Num IN (SELECT * FROM #SplitValues)
Вместо использования таблицы #SplitValues
есть возможность использовать SELECT TRIM(Value) FROM STRING_SPLIT(@MyValues, @Separator)
непосредственно в последнем select
, однако таким образом функционируют TRIM
и SPLIT_STRING
вызывается для каждой строки в таблице #Numbers
, которая "тяжелее" для выполнения.
Наконец, вместо строкового параметра вы можете создать раскрывающийся список флажков и передать его значения таким же образом , как строка, содержащая числа, разделенные запятой.