J'ai un proc stocké T-SQL qui fournit une bonne quantité de données à une grille sur une page .NET .... tellement que je mets des choix au sommet de la page pour "0-9" et chaque lettre dans l'alphabet de sorte que lorsque l'utilisateur clique sur la lettre, je veux filtrer mes résultats en fonction des résultats qui commencent par cette première lettre. Disons que nous utilisons des noms de produits. Donc, si l'utilisateur clique sur "A", je veux seulement que mon proc stocké renvoie des résultats où SUBSTRING (ProductName, 1, 1) = "A".T-SQL Instruction de cas utilisant la sous-chaîne et isnumérique
Où je suis accroché est sur les noms de produits qui commencent par un nombre. Dans ce cas, je veux récupérer toutes les valeurs de ProductName où ISNUMERIC (SUBSTRING (ProductName, 1, 1)) = 1. J'utilise un paramètre d'entrée appelé @FL. @FL sera soit un zéro (nous avons peu de produits qui commencent par des chiffres, donc je les regroupe tous ensemble de cette façon).
Bien sûr, il y a aussi l'alternative de WHERE SUBSTRING (ProductName, 1, 1) IN ('0', '1', '2' .....) mais même alors, je n'ai jamais pu Concevoir une instruction CASE qui fera une = sur une évaluation et une déclaration IN pour l'autre.
Voici ce que j'ai dans ma proc pour la partie CAS de ma clause WHERE. Cela ne fonctionne pas, mais cela peut être utile si ce n'est que d'un point de vue pseudocode.
Merci d'avance pour toute idée que vous pourriez avoir.
AND CASE @FL
WHEN "0" THEN
CASE WHEN @FL = "0" THEN
isnumeric(substring(dbo.AssnCtrl.Name, 1, 1)) = 1
ELSE
SUBSTRING(dbo.AssnCtrl.Name, 1, 1) = @FL
END
END
*** Je sais que cette utilisation de l'instruction CASE est « non standard », mais je l'ai trouvé en ligne et pensé qu'il avait une certaine promesse. Mais les tentatives d'utilisation d'une seule instruction CASE ont abouti au même résultat (une erreur près de '=').
Le boîtier intérieur est redondant - le ISNUMBERIC sera toujours exécutée car @FL a déjà été testé pour être « 0 » –