Трябва да можете да направите нещо подобно:
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;
- Присвоете 1 на
@OrderByColumn
за сортиране поForename
. - Задайте 2 за сортиране на
Surname
. - И т.н... можете да разширите тази схема до произволен брой колони.
Все пак внимавайте за производителността. Тези видове конструкции могат да попречат на способността на оптимизатора на заявки да намери оптимален план за изпълнение. Например, дори ако Forename
е покрита от индекс, заявката все пак може да изисква пълно сортиране, вместо просто да обикаля индекса в ред.
Ако случаят е такъв и не можете да живеете с последиците за производителността, може да се наложи да имате отделна версия на заявката за всеки възможен ред на сортиране, което значително усложнява нещата от страна на клиента.