Okej, jag måste ge dig lite bakgrund först.
När du tillåter att SSRS-parametern väljer flera värden skapar valet av flera värden en kommaavgränsad värdesträng som en sträng
'value1,value2,value3'
För att kontrollera värden i en sträng med IN
operator vi behöver strängar sammanlänkade med kommatecken ungefär så här ....
'value1','value2','value3'
Din proc
Nu i din proc när du infogar värden uttryckligen infogar den flera värden i din tabell.
INSERT INTO Table_Value_Param
VALUES ('value1'), --<-- 1st value/Row
('value2'), --<-- 2nd Value/Row
('value3') --<-- 3rd Value/Row
och detta ger dig tillbaka de förväntade resultaten som när du i din procedur kör en sats som
SELECT *
FROM Table_Name
WHERE ColumnName IN (SELECT ColumnName
FROM Table_Value_Param)
Å andra sidan när du försöker infoga i en tabell med hjälp av SSRS-rapportparametern infogar du ett värde som
INSERT INTO Table_Value_Param
VALUES ('value1,value2,value3') --<-- One Row/Value containing all the values comma separated
Lösning
Skapar TVP
i den här situationen hjälper det inte riktigt, vad jag gör är att använda dbo.Split()
funktion i min procedur.
Du kan hitta många definitioner för delad funktion online, för några coola, ta en titt här Split Function equivalent in tsql?
När du väl har skapat den här delade funktionen använd bara den här funktionen i din procedurdefinition, du behöver inte ens parametrarna för tabellvärde då.
Något sånt här...
SELECT *
FROM Table_Name
WHERE ColumnName IN (
SELECT Value
FROM dbo.Split(@Report_Param, ',')
)