Dovresti essere in grado di fare qualcosa del genere:
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;
- Assegna 1 a
@OrderByColumn
per ordinare suForename
. - Assegna 2 per ordinare su
Surname
. - Ecc... puoi espandere questo schema a un numero arbitrario di colonne.
Attenzione però alle prestazioni. Questi tipi di costrutti possono interferire con la capacità di Query Optimizer di trovare un piano di esecuzione ottimale. Ad esempio, anche se Forename
è coperto dall'indice, la query potrebbe comunque richiedere l'ordinamento completo invece di attraversare semplicemente l'indice in ordine.
Se questo è il caso e non riesci a convivere con le implicazioni sulle prestazioni, potrebbe essere necessario disporre di una versione separata della query per ogni possibile ordinamento, complicando notevolmente le cose dal lato client.