sql >> Base de Datos >  >> RDS >> Sqlserver

Ordenar usando un parámetro para el nombre de la columna

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 en Forename .
  • 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.