Debería poder hacer algo como esto:
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;
- Asigne 1 a
@OrderByColumn
para ordenar enForename
. - Asigne 2 para ordenar por
Surname
. - Etc... puede expandir este esquema a un número arbitrario de columnas.
Sin embargo, tenga cuidado con el rendimiento. Este tipo de construcciones pueden interferir con la capacidad del optimizador de consultas para encontrar un plan de ejecución óptimo. Por ejemplo, incluso si Forename
está cubierto por el índice, la consulta aún puede requerir la ordenación completa en lugar de simplemente recorrer el índice en orden.
Si ese es el caso, y no puede vivir con las implicaciones de rendimiento, puede ser necesario tener una versión separada de la consulta para cada orden de clasificación posible, lo que complica considerablemente las cosas del lado del cliente.