J'ai une application ASP.NET qui doit rechercher une colonne VARCHAR (20) en utilisant des listes et des plages. En d'autres termes, l'entrée pourrait être quelque chose comme:Listes de recherche, plages
ABC,444,CD-EF,90-BA,HIJ
et le résultat doit être l'équivalent de:
SELECT * FROM table
WHERE
Col1 = 'ABC' OR
Col1 = '444' OR
Col1 BETWEEN 'CD' AND 'EF' OR
Col1 BETWEEN '90' AND 'BA' OR
Col1 = 'HIJ'
L'ordre de tri régulier colonne SQL est acceptable pour les plages. Il y a deux parties principales impliquées ici:
- Envoi des paramètres de .NET à une procédure stockée. Utilisation des paramètres du SP pour effectuer une recherche.
Quelques options que j'ai considéré, qui ne sont pas mutuellement exclusives:
- je pourrais envoyer la chaîne comme il est. Il n'y a pas
array[] = SPLIT(',', @query)
ou similaire, donc l'analyse serait de bas niveau. Je préfère faire l'analyse du côté .NET. - Coté .NET, convertir en XML, dans SP convertir en table.
- Utilisez un curseur pour parcourir les paramètres déjà présents dans la table, effectuer des requêtes séparées et fusionner les résultats.
- Créer une dynamique où la clause (sur le côté SQL aveC# 1, ou sur le côté .NET)
SQL dynamique sur le côté .NET semble être le moyen « facile », mais je ne suis pas convaincu que c'est le meilleur. Des pensées?
J'ai fini par le faire de cette façon.Garder le côté serveur a ajouté un peu de réutilisation, mais la valeur était négligeable pour l'effort. –