Jeg er nødt til at give dig noget baggrund 1.
Når du tillader SSRS-parameter at vælge flere værdier, opretter valget af flere værdier en kommaafgrænset streng af værdi som én streng
'value1,value2,value3'
For at kontrollere værdier i en streng ved hjælp af IN
operatør vi har brug for strenge sammenkædet med kommaer noget som dette ....
'value1','value2','value3'
Din proc
Nu i din proces, når du indsætter værdier eksplicit, indsætter den flere værdier i din tabel.
INSERT INTO Table_Value_Param
VALUES ('value1'), --<-- 1st value/Row
('value2'), --<-- 2nd Value/Row
('value3') --<-- 3rd Value/Row
og dette giver dig de forventede resultater tilbage, som når du inde i din procedure udfører en sætning som
SELECT *
FROM Table_Name
WHERE ColumnName IN (SELECT ColumnName
FROM Table_Value_Param)
På den anden side, når du forsøger at indsætte i tabel ved hjælp af SSRS rapport Parameter du tabel indsætter værdi som
INSERT INTO Table_Value_Param
VALUES ('value1,value2,value3') --<-- One Row/Value containing all the values comma separated
Løsning
Opretter TVP
i denne situation hjælper det ikke rigtigt, det jeg gør er at bruge dbo.Split()
funktion inde i min procedure.
Du kan finde mange definitioner for split funktion online, for nogle seje, se her Split Function equivalent in tsql?
Når du har oprettet denne opdelte funktion, skal du bare bruge denne funktion i din proceduredefinition, du behøver ikke engang parametrene med tabelværdi.
Sådan noget her...
SELECT *
FROM Table_Name
WHERE ColumnName IN (
SELECT Value
FROM dbo.Split(@Report_Param, ',')
)