Powinieneś być w stanie zrobić coś takiego:
SELECT *
FROM
TableName
WHERE
(Forename LIKE '%' + @SearchValue + '%') OR
(Surname LIKE '%' + @SearchValue + '%') OR
(@SearchValue = 'ALL')
ORDER BY
CASE @OrderByColumn
WHEN 1 THEN Forename
WHEN 2 THEN Surname
END;
- Przypisz 1 do
@OrderByColumn
sortować wedługForename
. - Przypisz 2, aby sortować według
Surname
. - Itd... możesz rozszerzyć ten schemat do dowolnej liczby kolumn.
Uważaj jednak na wydajność. Tego rodzaju konstrukcje mogą zakłócać zdolność optymalizatora zapytań do znajdowania optymalnego planu wykonania. Na przykład, nawet jeśli Forename
jest objęty indeksem, zapytanie może nadal wymagać pełnego sortowania, a nie tylko przechodzenia przez indeks w kolejności.
Jeśli tak jest i nie możesz pogodzić się z konsekwencjami wydajności, może być konieczne posiadanie oddzielnej wersji zapytania dla każdego możliwego porządku sortowania, co znacznie komplikuje sprawy po stronie klienta.