2009-06-29 5 views
1

J'ai examiné les autres questions concernant la sélection de plusieurs valeurs dans les services de génération de rapports et aucune d'entre elles n'a corrigé mon problème.
Mon problème est le suivant. J'ai un rapport qui a une requête pour le paramètre - @Type.
Sélectionnez distincte (type) de l'ordre typetable par typeValeur de mulit et procédures stockées

le rapport paramenter est mis en place et le rapport montre tous les résultats retournés (actuellement 3) dans la zone de sélection.

Ma procédure stockée a la clause suivante: où Type (@Type). Le rapport renvoie uniquement le premier élément dans la zone de sélection au lieu des trois.

Veuillez nous aider.

merci !!!

Répondre

0

Je ne crois pas qu'il soit possible de faire une instruction IN (@type). IN

IN doit être séparé par des virgules, et je ne crois pas que vous pouvez passer dans @Type comme "1,2,3" et que cela fonctionne.

Vous pourriez peut-être analyser la variable @Type dans une table temporaire, puis faire un JOIN sur la table temporaire. Cela pourrait être un peu lent cependant.

1

Je ne suis pas sûr du format ou le type de données qui est renvoyée par la zone de liste multi-sélection, mais si elle est quelque chose comme:

X,Y,Z 

vous avez deux options (je préfère l'option 1) :

option 1
Vous pouvez le diviser à part en utilisant Arrays and Lists in SQL Server 2005- Using a Table of Numbers. En utilisant ce code, vous pouvez diviser la chaîne en une table, avec chaque valeur dans sa propre ligne. Vous pouvez alors INNER JOINiser cette table à votre requête et filtrer en fonction des multiples valeurs @Type.

option 2
Au sein de votre procédure stockée, vous pouvez construire votre requête dynamique dans une chaîne. Vous pouvez ensuite EXECUTER (@ YourString) et exécuter cette requête. Votre chaîne ressemblerait à quelque chose comme:

SET @ QUERY = 'SELECT ... FROM ... WHERE ... IN (' + ISNULL (@Type, '') + ')'

Regardez ce lien The Curse and Blessings of Dynamic SQL

0

J'ai utilisé la fonction table-variable suivante pour diviser une liste en une table qui peut être JOIN'd en IN'd.

ALTER FUNCTION [dbo].[Split] (@List nvarchar(4000), @SplitOn nvarchar(5)) RETURNS @RtnValue table (
      Id int identity(1,1), Value nvarchar(100)) AS BEGIN WHILE (Charindex(@SplitOn,@List)>0)   BEGIN   Insert Into @RtnValue (value)   Select Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))    Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))   END  Insert Into @RtnValue (Value) Select Value = ltrim(rtrim(@List)) 

    Return END 
Questions connexes