Správně, musím vám dát trochu pozadí.
Když parametru SSRS povolíte výběr více hodnot, výběr více hodnot vytvoří řetězec hodnot oddělený čárkou jako jeden řetězec
'value1,value2,value3'
Chcete-li zkontrolovat hodnoty v řetězci pomocí IN
operátor potřebujeme řetězce zřetězené čárkami něco takového ....
'value1','value2','value3'
Váš postup
Nyní ve vašem procesu, když explicitně vložíte hodnoty, vloží do vaší tabulky více hodnot.
INSERT INTO Table_Value_Param
VALUES ('value1'), --<-- 1st value/Row
('value2'), --<-- 2nd Value/Row
('value3') --<-- 3rd Value/Row
a to vám vrátí očekávané výsledky, jako když uvnitř procedury provedete příkaz jako
SELECT *
FROM Table_Name
WHERE ColumnName IN (SELECT ColumnName
FROM Table_Value_Param)
Na druhou stranu, když se pokusíte vložit do tabulky pomocí parametru sestavy SSRS, tabulka vloží hodnotu jako
INSERT INTO Table_Value_Param
VALUES ('value1,value2,value3') --<-- One Row/Value containing all the values comma separated
Řešení
Vytváření TVP
v této situaci opravdu nepomáhá, co dělám, je použití dbo.Split()
funkce uvnitř mého postupu.
Mnoho definic pro funkci rozdělení můžete najít online, na některé skvělé se podívejte zde Split Function equivalent in tsql?
Jakmile vytvoříte tuto funkci rozdělení, použijte tuto funkci v definici procedury, pak ani nepotřebujete parametry s hodnotou tabulky.
Něco takového...
SELECT *
FROM Table_Name
WHERE ColumnName IN (
SELECT Value
FROM dbo.Split(@Report_Param, ',')
)