2009-12-04 5 views
2

Comment puis-je utiliser un param pour les valeurs mulitple dans un "où dans" requête:Utilisation Où In avec Param

Select [..] where str in ('AB','BC') 

Bien sûr, cela ne permettra pas à plusieurs valeurs:

Select [..] where str in (@param) 
+0

quelle version de SQL Server utilisez-vous? – AdaTheDev

Répondre

1

Vous besoin d'ajouter chaque paramètre en tant que valeur dans la clause IN, par exemple

where str in (@param1, @param2, @param3) 

Alternativement, vous pouvez créer une requête manuellement et l'EXEC (bien que cela soit aussi très dangereux). EDIT: Donc, juste pour clarifier, puisque vous recevez une chaîne de valeurs séparées par des virgules que vous voulez utiliser dans une clause IN, vous devrez faire ce que astander a suggéré et diviser votre chaîne en une tableau que vous pourriez ensuite utiliser dans la clause.

En utilisant l'un des links Astander mentionné, vous pouvez effectuer les opérations suivantes:

select [...] 
where str in (select items from dbo.split(@ItemString)) 

(où vos valeurs séparées par des virgules sont en @ItemString).

+0

"Vous ne pouvez pas discuter avec un mot comme tendu!" Tigger –

+0

Je pense que l'OP pourrait avoir l'intention que les params soient dans le seul param tel que @param = '' 'AB' ',' 'BC' '' –

+1

Qui ne fonctionnera pas à moins que la colonne contienne cette valeur exacte (qu'elle ne devrait pas ' t). –

3

L'alternative à l'ajout de chaque valeur en tant que param séparée, si vous utilisez SQL Server 2008, est de passer dans un table valued parameter qui vous permettra de faire quelque chose comme:

SELECT... 
FROM YourTable t 
    JOIN @TableParam p ON t.str = p.str 

Si vous n'êtes pas en utilisant SQL 2008 et vous voulez réellement passer toutes les valeurs en une chaîne CSV, alors l'autre approche commune est d'avoir une fonction définie par l'utilisateur qui sépare la chaîne CSV et retourne une TABLE que vous pouvez ensuite rejoindre, par exemple

SELECT .... 
FROM YourTable t 
    JOIN dbo.fnSplit(@param) s ON t.str = s.str 
+0

C'est gentil; n'était pas au courant de cela. –