J'ai une procédure stockée qui utilise la clause dans la clause. Dans mon application ASP.NET, j'ai une zone de texte multiligne qui fournit des valeurs à la procédure stockée. Je veux pouvoir commander par les valeurs car ils ont été entrés dans la zone de texte. J'ai découvert comment procéder facilement à MySQL (à l'aide de la fonction de champ), mais pas un équivalent de serveur SQL.
Donc, ma requête ressemble à: p>
Select * from myTable where item in @item
3 Réponses :
Comment pouvez-vous paramétrer la clause Comme vous êtes sur SQL Server 2008, je passerais dans un paramètre de valorisation de la table avec deux Colonnes dans code>? p>
item code> et
Sort_order code> et rejoignez plutôt cela. Ensuite, vous pouvez simplement ajouter un ordre
par sort_order code> sur la fin. P>
+1, ou si par CSV, divisé en une variable @Table avec une colonne d'identité que vous pouvez rejoindre puis commander par
@Km donc op doit écrire une procédure de magasin pour une sélection simple.
@Luissiquot - Ils utilisent déjà une procédure stockée. Mais ils devraient utiliser des requêtes paramétrées même si elles ne l'étaient pas. Il existe de nombreuses fonctions de tables de table fragmentées qui fonctionnent comme suggérées par km que l'OP pouvait rejoindre, mais si la compatibilité de 2005 n'est pas nécessaire, TVPS sera meilleur.
Sélectionnez Commande par l'ordre des valeurs dans une clause SQL dans () Vérifier Cette solution b>. L'espoir aide quelqu'un.
De la même manière que vous concaténez ('113113', '112112', '114114') Pour passer à la phrase SQL dans la clausule où vous pouvez concaténer pour passer à votre commande par clausule p> p>
Pas possible Il ne sait pas combien de valeurs il y aura - votre déclaration de cas pourrait être de 1 à N où n est vraiment vraiment très élevé.
@Jonh peut-être qu'il sait combien de valeurs il y aura. Bien sûr, cette solution est destinée à un cas fini et "logique". OP peut évaluer si un petit n correspond à ses besoins. Assurez-vous que si cela est pour un problème de présentation N couvre tous les cas logiques.
Je suis d'accord avec vous cependant qu'il a mentionné qu'il ne sait pas combien. D'où mon commentaire.
@Jonh mais les valeurs "entrent dans les données de la zone de texte"
En venant dans les données de Textbox, signifie qu'il pourrait être dynamique - quelqu'un pourrait entrer sur 113, 114, 115, 116 et ainsi de suite, et votre déclaration de cas devra gérer tous ceux-ci. Mon point n'est pas que vous avez tort - mon point est votre solution n'est pas assez flexible. Il doit savoir combien de fois les déclarations de l'affaire.
@Jonh Si quelqu'un entre dans (ou sélectionne), le N ne peut pas être aussi gros pour dire que cette solution n'est pas flexible, car pour toute quantité de choix montrés à un humain qu'il peut taper (ou sélectionner) cette solution fonctionne bien. Une déclaration SQL peut gérer la typyycaly jusqu'à 268,435,456 caractères, la zone de texte et un humain peuvent gérer le même montant? couper coller?
@Luis Siquot - Jonh est correct. Les gens peuvent entrer 113 144 123, etc. et c'est une variable que je ne suis pas préparée à coder une déclaration de cas dynamique pour gérer toutes les névrations - les permutations seraient trop grandes. Je cherche le moyen le plus simple que je pense que Martin a offert.
Ce serait brutal de mettre en œuvre et probablement pas très performant.
Que cette réponse soit suffisamment réactive à la question particulière est discutable, semble-t-il, mais je l'ai trouvé utile pour un problème similaire. La dépréciation (et le débat) semble un peu excessif.
du commentaire de KM ci-dessus ...
Je sais que vous n'avez pas indiqué que c'est une virgule séparée, mais s'il s'agissait d'un CSV ou même si vous avez l'espace séparé, vous pouvez faire ce qui suit. P> < pré> xxx pré>
puis créer de cette façon crée une table qui contient une table Commandez, nommément, fn_integerinlist () code>: p>
sortOrdon code> et l'identifiant ou le numéro que vous passez. Vous pouvez bien sûr modifier cela afin que vous recherchiez l'espace
code> plutôt, code>, code > valeurs. Sinon, Martin a la bonne idée dans sa réponse. Veuillez noter dans mon exemple J'utilise l'une de mes tables. Vous devrez donc modifier le nom
Connexion code> à tout ce que vous faites affaire. P> p>