Добре, първо трябва да ви дам малко информация.
Когато позволите на параметъра SSRS да избира множество стойности, изборът на множество стойности създава разделен със запетая низ от стойност като един низ
'value1,value2,value3'
За да проверите стойности в низ с помощта на IN
оператор имаме нужда от низове, свързани със запетаи, нещо подобно ....
'value1','value2','value3'
Вашата процедура
Сега във вашата процедура, когато изрично вмъквате стойности, тя вмъква множество стойности във вашата таблица.
INSERT INTO Table_Value_Param
VALUES ('value1'), --<-- 1st value/Row
('value2'), --<-- 2nd Value/Row
('value3') --<-- 3rd Value/Row
и това ви връща очакваните резултати, тъй като когато във вашата процедура изпълнявате израз като
SELECT *
FROM Table_Name
WHERE ColumnName IN (SELECT ColumnName
FROM Table_Value_Param)
От друга страна, когато се опитате да вмъкнете в таблица с помощта на SSRS отчет Параметър, таблицата вмъква стойност като
INSERT INTO Table_Value_Param
VALUES ('value1,value2,value3') --<-- One Row/Value containing all the values comma separated
Решение
Създаване на TVP
в тази ситуация наистина не помага, това, което правя, е да използвам dbo.Split()
функция в моята процедура.
Можете да намерите много дефиниции за функция за разделяне онлайн, за някои страхотни погледнете тук Split Function equivalent in tsql?
След като създадете тази функция за разделяне, просто използвайте тази функция във вашата дефиниция на процедура, тогава дори нямате нужда от параметри с стойности на таблица.
Нещо подобно...
SELECT *
FROM Table_Name
WHERE ColumnName IN (
SELECT Value
FROM dbo.Split(@Report_Param, ',')
)