У меня есть хранимый процесс T-SQL, который поставляет большое количество данных в сетку на странице .NET ... настолько, что я ставлю варианты в верхней части страницы для "0-9" икаждая буква в алфавите, поэтому, когда пользователь нажимает на букву, я хочу отфильтровать результаты на основе результатов, которые начинаются с этой первой буквы.Допустим, мы используем названия продуктов.Поэтому, если пользователь нажимает «A», я хочу, чтобы мой сохраненный процесс возвращал результаты, где SUBSTRING (ProductName, 1, 1) = «A».
То, где я зацикливаюсь, - это названия продуктов, которыеначать с числа.В этом случае я хочу получить все значения ProductName, где ISNUMERIC (SUBSTRING (ProductName, 1, 1)) = 1. Я использую входной параметр @FL.@FL будет либо нулем (у нас есть несколько продуктов, которые начинаются с цифр, поэтому я собираю их все вместе таким образом).
Конечно, есть также альтернатива WHERE SUBSTRING (ProductName, 1, 1) IN('0', '1', '2' .....), но даже тогда я никогда не мог придумать оператор CASE, который будет делать = для одной оценки и оператор IN для другой.
Вот что у меня есть в моем proc для части CASE моего предложения WHERE.Это не работает, но может быть полезным, если только с точки зрения псевдокода.
Заранее спасибо за любые идеи, которые у вас могут быть.
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
*** Я знаю, что этоиспользование оператора CASE является «нестандартным», но я нашел его в Интернете и подумал, что у него есть какое-то обещание.Но попытки использовать один оператор CASE дали тот же результат (ошибка около '=').