Du borde kunna göra något sånt här:
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;
- Tilldela 1 till
@OrderByColumn
för att sortera påForename
. - Tilldela 2 att sortera på
Surname
. - Etc... du kan utöka detta schema till godtyckligt antal kolumner.
Var dock försiktig med prestanda. Den här typen av konstruktioner kan störa frågeoptimerarens förmåga att hitta en optimal exekveringsplan. Till exempel även om Forename
täcks av index, kan frågan fortfarande kräva hela sorteringen istället för att bara gå igenom indexet i ordning.
Om så är fallet, och du inte kan leva med prestandakonsekvenserna, kan det vara nödvändigt att ha en separat version av frågan för varje möjlig sorteringsordning, vilket komplicerar saker och ting avsevärt på klientsidan.