Plusieurs valeurs de paramètre dans SSRS 2008 ne fonctionne pas
J'ai un paramètre @Department
et définir sa valeur dans le jeu de données à =Join(Parameters!Department.Value,",")
. Je l'ai mis pour qu'il accepte plusieurs valeurs, et dans mon SQL j'ai de l'alinéa suivant: (RTRIM(G.DeptName) IN (@Department))
.
Il fonctionne à chaque fois que l'utilisateur sélectionne un département, mais ne fonctionne pas du tout lorsque plusieurs départements sont sélectionnés. Il fonctionne, mais il n'affiche pas toutes les données. Par exemple, si je sélectionne "Comptables", il montre "Comptables" info. Mais si je sélectionne "Comptables" et "Marketing", rien ne s'affiche.
Des idées pourquoi cela ne fonctionne pas? Aussi, est-il possible de le faire de cette manière avec autre chose que la "chaîne de valeurs"?
Pourquoi êtes-vous à l'aide de la Rejoindre dans votre jeu de données? Les paramètres à valeurs multiples dans SSRS, il faut "juste" : msdn.microsoft.com/en-us/library/aa337292(v=sql.100).aspx
OriginalL'auteur The Vanilla Thrilla | 2012-04-02
Vous devez vous connecter pour publier un commentaire.
Vous faites une fausse hypothèse.
IN ('1,2,3,4')
est très différent deIN (1,2,3,4)
ouIN ('1', '2', '3', '4')
Ce que vous êtes en train de faire d'elle la première. Vous êtes de vérifier si le nom de votre service est dans une liste qui n'est un valeur de long; l' @ministère de la chaîne. Cette valeur a des virgules, mais c'est toujours une seule chaîne, et afin qu'il reste un seul élément dans la liste.
Vous avez deux options.
Construire le SQL de manière dynamique, de sorte que votre liste est une partie de la sql et pas un paramètre de chaîne.
Ou consulter l'un des nombreux
SPLIT()
fonction disponible sur la ligne. C'est celle que je recommande. Vous pouvez ensuite faire quelque chose comme...Ou mieux encore, de les rejoindre sur les résultats de l'
SPLIT()
fonction...G.DeptName
, en l'enveloppant dans une fonction telle queRTRIM()
signifie que vous ne pouvez pas utiliser cet indice pour rechercher les dossiers pertinents. Au lieu de cela, vous obtiendrez une analyse, de prise de l'index à côté inutile. Si possible, enregistrer la valeur pré-paré, de cette façon, vous n'avez pas besoinRTRIM()
dans votre requête, ce qui signifie que vous pouvez utiliser votre index, et de raccourcir votre code 🙂OriginalL'auteur MatBailie
Que les Dems dit, vous avez besoin d'une jointure de la fonction pour cela.
vous pouvez utiliser l'un de ici http://blog.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx
reste tout va bien avec votre requête
au lieu de
(RTRIM(G.DeptName) IN (@Department))
devrait fonctionner.
OriginalL'auteur IamCP