Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Passer plusieurs paramètres de valeur dans SSRS à la procédure stockée

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édure
SELECT * 
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, ',')
                       )