Du burde være i stand til at gøre noget som dette:
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;
- Tildel 1 til
@OrderByColumn
for at sortere påForename
. - Tildel 2 for at sortere på
Surname
. - Osv... du kan udvide dette skema til et vilkårligt antal kolonner.
Vær dog forsigtig med ydeevnen. Disse former for konstruktioner kan forstyrre forespørgselsoptimeringsfunktionens evne til at finde en optimal eksekveringsplan. For eksempel selvom Forename
er dækket af indeks, kan forespørgslen stadig kræve den fulde sortering i stedet for blot at krydse indekset i rækkefølge.
Hvis det er tilfældet, og du ikke kan leve med præstationsimplikationerne, kan det være nødvendigt at have en separat version af forespørgslen for hver mulig sorteringsrækkefølge, hvilket komplicerer tingene betydeligt på klientsiden.