Passer plusieurs valeurs pour un paramètre SQL
J'ai une CheckBoxList où les utilisateurs peuvent sélectionner plusieurs éléments dans la liste. J'ai donc besoin d'être en mesure de transmettre ces valeurs à ma Procédure Stockée, donc ils peuvent être utilisés dans une condition comme:
WHERE ID IN (1,2,3)
J'ai essayé de faire cela alors que c'est un paramètre nvarchar et je passe la chaîne 1,2,3
avec:
WHERE ID IN (@IDs)
Mais ce renvoyé l'erreur suivante:
Conversion failed when converting the nvarchar value '1,2,3' to data type int
Toute aide serait grandement appréciée!
Voir stackoverflow.com/questions/878833/... (ou utiliser un masque de bits)
OriginalL'auteur Curt | 2011-01-07
Vous devez vous connecter pour publier un commentaire.
Il ya quelques façons de le faire.
Vous pouvez passer dans le paramètre comme un blob XML comme dans cet exemple:
Ou de passer dans les valeurs au format CSV et l'utilisation d'une fonction de répartition pour diviser les valeurs dans une variable de table (il y a beaucoup de scinder les fonctions de là, la recherche rapide va jeter un).
Si vous étiez à l'aide de SQL 2008 ou plus tard, vous ont pu s'en servir de Table d'une valeur de Paramètres qui vous permettent de passer une variable de TABLE en tant que paramètre. Je blogué sur ces 3 approches d'un moment de retour, avec une rapide comparaison des performances.
comment utiliser le
[values from XML])
terme dans leWHERE IN (SELECT [values from XML])
avez-vous un code spécifique? pouvez-vous m'aider? désolé im nouveau à cela.OriginalL'auteur AdaTheDev
OriginalL'auteur jeyaprakash
J'ai trouvé une solution pour un problème similaire.
Il est utilisé pour un abonnement piloté par les données, mais peuvent être facilement modifiés pour une utilisation dans un paramètre.
vérifiez mon blog ici avec une description détaillée
Si vous rencontrez le problème de la conversion à un appel de procédure stockée, faites le moi savoir.
Désolé, j'étais plutôt en retard..... Je vais convertir le billet de blog pour séparer les réponses. Pour l'ensemble de l'histoire : le blog fonctionne encore!
C'est un assez long article de blog et il est toujours en ligne (et sera pendant un certain temps)
J'ai créé une table très très simple avec le nom tmpMultiSel avec deux colonnes (ID, Nom)
Voici ce que j'ai fait pour le rendre multi-valeur": 1. Créer une fonction que j'ai trouvé une fonction qui accepte deux paramètres et des scissions de la chaîne délimitée (premier paramètre) dans une table temporaire. Je l'ai trouvé codeproject.com/Articles/7938/..., mais a modifié le nom de mes "habitudes" _f_ParseText2Table Si nous tester cette fonction, il fonctionne comme ceci:
OriginalL'auteur Montfrooij