Juist, ik moet je eerst wat achtergrondinformatie geven.
Wanneer u de SSRS-parameter toestaat om meerdere waarden te selecteren, creëert de selectie van meerdere waarden een door komma's gescheiden tekenreeks als één tekenreeks
'value1,value2,value3'
Waarden in een tekenreeks controleren met IN
operator we hebben strings nodig die aaneengeschakeld zijn met komma's, zoiets als dit ....
'value1','value2','value3'
Uw Proc
Als je nu expliciet waarden invoegt in je proces, worden er meerdere waarden in je tabel ingevoegd.
INSERT INTO Table_Value_Param
VALUES ('value1'), --<-- 1st value/Row
('value2'), --<-- 2nd Value/Row
('value3') --<-- 3rd Value/Row
en dit geeft je de verwachte resultaten terug, zoals wanneer je binnen je procedure een instructie uitvoert zoals
SELECT *
FROM Table_Name
WHERE ColumnName IN (SELECT ColumnName
FROM Table_Value_Param)
Aan de andere kant, wanneer u probeert in te voegen in een tabel met behulp van SSRS-rapportparameter, voegt uw tabel waarde in zoals
INSERT INTO Table_Value_Param
VALUES ('value1,value2,value3') --<-- One Row/Value containing all the values comma separated
Oplossing
TVP
maken in deze situatie helpt het niet echt, wat ik doe is gebruik maken van dbo.Split()
functie binnen mijn procedure.
Je kunt veel definities voor split-functie online vinden, voor een paar coole, kijk hier Split Function equivalent in tsql?
Als u deze splitfunctie eenmaal hebt gemaakt, gebruikt u deze functie gewoon binnen uw proceduredefinitie, u hebt dan niet eens de tabelwaardeparameters nodig.
Zoiets...
SELECT *
FROM Table_Name
WHERE ColumnName IN (
SELECT Value
FROM dbo.Split(@Report_Param, ',')
)