Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Reihenfolge Durch Verwendung eines Parameters für den Spaltennamen

Sie sollten in der Lage sein, so etwas zu tun:

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;
  • Weise 1 @OrderByColumn zu nach Forename zu sortieren .
  • Ordnen Sie 2 zu, um nach Surname zu sortieren .
  • Etc... Sie können dieses Schema auf eine beliebige Anzahl von Spalten erweitern.

Achten Sie jedoch auf die Leistung. Diese Art von Konstrukten kann die Fähigkeit des Abfrageoptimierers beeinträchtigen, einen optimalen Ausführungsplan zu finden. Zum Beispiel auch wenn Forename vom Index abgedeckt wird, kann die Abfrage dennoch die vollständige Sortierung erfordern, anstatt nur den Index der Reihe nach zu durchlaufen.

Wenn dies der Fall ist und Sie mit den Auswirkungen auf die Leistung nicht leben können, kann es erforderlich sein, eine separate Version der Abfrage für jede mögliche Sortierreihenfolge zu haben, was die Dinge auf der Clientseite erheblich verkompliziert.