Bon, j'ai besoin de vous donner un peu de recul d'abord.
Lorsque vous autorisez le paramètre SSRS à sélectionner plusieurs valeurs, la sélection de plusieurs valeurs crée une chaîne de valeur délimitée par des virgules comme une seule chaîne
'value1,value2,value3'
Pour vérifier les valeurs d'une chaîne à l'aide de IN
opérateur nous avons besoin de chaînes concaténées avec des virgules quelque chose comme ça ....
'value1','value2','value3'
Votre procédure
Maintenant, dans votre proc, lorsque vous insérez explicitement des valeurs, plusieurs valeurs sont insérées dans votre table.
INSERT INTO Table_Value_Param
VALUES ('value1'), --<-- 1st value/Row
('value2'), --<-- 2nd Value/Row
('value3') --<-- 3rd Value/Row
et cela vous donne les résultats attendus car lorsque vous exécutez une instruction comme
à l'intérieur de votre procédureSELECT *
FROM Table_Name
WHERE ColumnName IN (SELECT ColumnName
FROM Table_Value_Param)
D'autre part, lorsque vous essayez d'insérer dans le tableau à l'aide du paramètre de rapport SSRS, votre tableau insère une valeur telle que
INSERT INTO Table_Value_Param
VALUES ('value1,value2,value3') --<-- One Row/Value containing all the values comma separated
Solution
Création de TVP
dans cette situation n'aide pas vraiment, ce que je fais est d'utiliser dbo.Split()
fonction à l'intérieur de ma procédure.
Vous pouvez trouver de nombreuses définitions de la fonction de fractionnement en ligne, pour quelques-unes intéressantes, jetez un œil ici Split Function equivalent in tsql?
Une fois que vous avez créé cette fonction de fractionnement, utilisez simplement cette fonction dans votre définition de procédure, vous n'avez même pas besoin des paramètres de valeur de table.
Quelque chose comme ça...
SELECT *
FROM Table_Name
WHERE ColumnName IN (
SELECT Value
FROM dbo.Split(@Report_Param, ',')
)