3 votes

la requête fonctionne dans les ssms mais pas dans les ssrs

Le problème que je rencontre me laisse donc complètement perplexe. J'ai un ensemble de données qui utilise une requête avec 4 paramètres. Il y a les choix habituels que les utilisateurs peuvent choisir pour les différents paramètres, sauf pour un choix qui est ' ALL' qui, si l'utilisateur le choisit, choisira tout.

J'exécute le rapport SSRS et, pour une raison quelconque, lorsque l'utilisateur choisit l'option "ALL" pour un seul des paramètres, il ne renvoie aucun enregistrement, mais seulement un tableau vide. J'essaie de recréer la même requête derrière le jeu de données sur SSMS et j'entre l'option 'ALL' dans le même paramètre problématique et elle renvoie tous les enregistrements que je m'attendais à voir.

Une requête :

Declare @workingParam1 as varchar(200)
Declare @workingParam2 as varchar(50)
Declare @workingParam3 as varchar(50)
Declare @problemParam as varchar(50) -- this one is giving me problems only 
                                     -- if I choose ' ALL'

SELECT        Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9
FROM            View
WHERE        
(Col1 = @problemParam OR @problemParam = ' ALL') And 
(Col2 = @workingParam1 OR @workingParam1  = ' ALL') And
(Col3 = @workingParam2 OR @workingParam2 = ' ALL') And 
(Col4 = @workingParam3 OR @workingParam3 = ' ALL')
ORDER BY Col1, Col2, Col3

Merci !

3voto

M.Ali Points 53683

Je crois que vous avez un paramètre de sélection multiple dans votre rapport SSRS. Lorsque vous sélectionnez ALL de la liste déroulante des paramètres dans le rapport ssrs, il ne passe pas à votre requête t-sql une valeur de chaîne littérale All mais il transmet toutes les valeurs à votre t-sql dans une liste délimitée par des virgules, '1,2,3,4' .

Vous devez maintenant modifier votre code T-SQL pour qu'il puisse traiter les paramètres transmis sous forme de liste délimitée par des virgules.

Il existe de nombreuses questions sur Stack Overflow à ce sujet.

Vous pouvez également créer votre propre site web Select All à afficher dans votre liste déroulante de paramètres, alors seulement vous pourrez utiliser la logique que vous avez utilisée dans votre requête actuelle, mais même dans ce cas, j'utiliserais quelque chose comme...

WHERE (ColumnName = @Param OR @Param = 'All') 

Vous obtiendrez les résultats souhaités, mais si vous souhaitez obtenir de meilleures performances de votre code t-sql, utilisez une procédure stockée pour votre ensemble de données et utilisez le sql dynamique pour filtrer les données de l'ensemble de données. Where complètement si l'utilisateur passe All paramètre.

Beaucoup d'informations dans cette courte réponse et beaucoup de recherches à faire sur Internet :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X