Использование предиката LIKE внутри выражения CASE в предложении WHERE - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть таблица имен:

Иоанн
Петр
Петр-Павел
Мэри

У меня есть выпадающий список этих имен иЯ добавил «Все» в качестве опции вверху.

Я хочу передать имя, выбранное в раскрывающемся списке, в качестве параметра предложения where.

Что я пытаюсь сделатьУ do есть только условие where, если name не передано как 'All'

SELECT City, State
FROM EmployeeDetails
WHERE @NAME =
              CASE @NAME
                         WHEN 'All' THEN '1=1'
              ELSE (EmployeeDetails.NAME LIKE '' + @NAME + '%')

Я не могу заставить это работать.Инструкция ELSE выдает ошибку «Неверный синтаксис рядом со словом« LIKE ».

Просмотр других найденных мной вопросов StackOverflow:

  1. Операторы CASE возвращают скалярзначения, поэтому имеет смысл, что ему не нравится мой оператор LIKE.
  2. Помещение предложения ELSE в одинарные кавычки не возвращает результатов (предложение breaks where)
  3. Попытка выполнить IF (@NAME)= 'All') ломает предложение where, и в каждом вопросе по StackOverflow консенсус заключается в том, чтобы превратить операторы IF в операторы CASE.

При выполнении предложения WHERE, не входящего в оператор CASE, он работает для оператораконкретное имя, например:

WHERE (EmployeeDetails.NAME LIKE '' + @NAME + '%')

Если я найду Питера, он вернет 2 результата, как и ожидалось.Мэри 1 результат и т. Д.
Я, очевидно, не могу передать «Все» на это.

1 Ответ

0 голосов
/ 15 ноября 2018

Не используйте case в where.Просто сделайте:

SELECT City, State
FROM EmployeeDetails
WHERE (@NAME = 'All') OR (EmployeeDetails.NAME LIKE '' + @NAME + '%');

Я не уверен, какова цель '' +, но у вас есть это в вашем вопросе, поэтому я оставляю это.

...