Я пытаюсь определить порядок сортировки ASC/DESC, определяемый параметром в хранимой процедуре.Ошибка в предложении ORDER BY с использованием CASE WHEN
После большого количества исследований, я нашел этот подход (с упрощением):
SELECT *
FROM MyTable
ORDER BY CASE WHEN @reverse = 1 THEN
MyColumn
END DESC,
CASE WHEN @reverse = 0 THEN
MyColumn
END ASC
Однако этот код выдает следующее сообщение об ошибке:
Msg 408, Level 16, State 1, Line 8
A constant expression was encountered in the ORDER BY list, position 2.
Почему это происходит? Очевидно, что MyColumn не является константой - это имя столбца.
Использование SQL Server 2016 в режиме совместимости 2016 (130)
Благодаря
Ваше второе выражение 'CASE' всегда' NULL', так как единственным условием является 'WHEN 1 = 0', и это всегда false, и вы не сделали этого определите 'ELSE' – Lamak
@radders. Проверьте приведенное ниже решение, которое будет работать для вас. Просто отправьте фильтр как строку в usp и соедините его с запросом, после чего вы сможете получить результат, выполнив новый запрос (с фильтром) используя EXEC («Запрос с фильтром DESC или ASC») –
@ Lamak, если вы посмотрите на отредактированный OP, вы увидите, что WHEN не всегда NULL - только один из двух из них будет, в зависимости от значения переменной BIT. – radders