Sie sollten in der Lage sein, so etwas zu tun:
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;
- Weise 1
@OrderByColumn
zu nachForename
zu sortieren . - Ordnen Sie 2 zu, um nach
Surname
zu sortieren . - Etc... Sie können dieses Schema auf eine beliebige Anzahl von Spalten erweitern.
Achten Sie jedoch auf die Leistung. Diese Art von Konstrukten kann die Fähigkeit des Abfrageoptimierers beeinträchtigen, einen optimalen Ausführungsplan zu finden. Zum Beispiel auch wenn Forename
vom Index abgedeckt wird, kann die Abfrage dennoch die vollständige Sortierung erfordern, anstatt nur den Index der Reihe nach zu durchlaufen.
Wenn dies der Fall ist und Sie mit den Auswirkungen auf die Leistung nicht leben können, kann es erforderlich sein, eine separate Version der Abfrage für jede mögliche Sortierreihenfolge zu haben, was die Dinge auf der Clientseite erheblich verkompliziert.