Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ordine Utilizzando un parametro per il nome della colonna

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