Vous devriez pouvoir faire quelque chose comme ceci :
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;
- Attribuez 1 à
@OrderByColumn
trier surForename
. - Attribuez 2 pour trier sur
Surname
. - Etc... vous pouvez étendre ce schéma à un nombre arbitraire de colonnes.
Attention tout de même aux performances. Ces types de constructions peuvent interférer avec la capacité de l'optimiseur de requête à trouver un plan d'exécution optimal. Par exemple, même si Forename
est couvert par l'index, la requête peut toujours nécessiter le tri complet au lieu de simplement parcourir l'index dans l'ordre.
Si tel est le cas, et que vous ne pouvez pas vivre avec les implications en termes de performances, il peut être nécessaire d'avoir une version distincte de la requête pour chaque ordre de tri possible, ce qui complique considérablement les choses côté client.