Ma procédure est quelque chose comme ça, très simple.
ALTER PROCEDURE dbo.MyProcedure @NoteStoreType INT AS SELECT Column1, Column2, Column3 FROM tblNoteStore WHERE tblNoteStore.Type IN (COALESCE(@NoteStoreType, tblNoteStore.Type))
Mon dataset pour remplir les valeurs de parameters disponibles:
SELECT DISTINCT tblNoteStore.Type, lstNoteTypes.Description FROM tblNoteStore INNER JOIN lstNoteTypes ON tblNoteStore.Type = lstNoteTypes.NoteTypeID ORDER BY lstNoteTypes.Description
Renvoie ce résultat:
Ensuite, je vais dans properties du paramètre de rapport pour autoriser plusieurs valeurs:
Maintenant, définissez les valeurs disponibles:
Ensuite, si j'exécute le rapport avec plus d'une valeur, cela me donne une erreur:
Je sais que cela arrive parce que SSRS traite plusieurs valeurs comme une string, en les passant par une virgule.
Mais quel serait le travail dans cette situation?
J'essaie d'éviter SQL dynamic car il est plus difficile à maintenir. Vous pouvez appliquer ce paramètre en tant que filter dans le SQL ou vous pouvez l'appliquer au niveau de l'set de données après l'exécution de la requête.
L'ajout d'un filter de jeu de données est assez simple. Le seul inconvénient est qu'il est less efficace. Si la différence de vitesse est insignifiante, c'est une bonne option.
Dans certaines versions de SSRS, vous pouvez utiliser une instruction IN
régulière dans le SQL:
WHERE tblNoteStore.Type IN (@NoteStoreType)
Si cela ne fonctionne pas avec votre version, vous pouvez également utiliser une fonction Split personnalisée dans votre SQL pour séparer la string séparée par des virgules en valeurs individuelles. Il existe déjà de nombreuses réponses à ce sujet spécifique.
Le paramètre @NoteStoreType INT
dans votre procédure stockée est un INTEGER unique, pas une list de valeurs entières. Vous devriez essayer avec une requête dynamic:
CREATE PROCEDURE dbo.MyProcedure @NoteStoreType NVARCHAR(2048) AS BEGIN DECLARE @cmd NVARCHAR(MAX) SET @cmd = 'SELECT Column1, Column2, Column3 FROM tblNoteStore WHERE tblNoteStore.Type IN (' + @NoteStoreType + ')'; EXEC (@cmd); END GO
Vérifiez-le ici: http://rextester.com/NWLLU92997