sql >> Databáze >  >> RDS >> Sqlserver

Seřadit pomocí parametru pro název sloupce

Měli byste být schopni udělat něco takového:

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;
  • Přiřaďte 1 k @OrderByColumn pro řazení podle Forename .
  • Přiřaďte 2 k řazení podle Surname .
  • Atd... toto schéma můžete rozšířit na libovolný počet sloupců.

Pozor však na výkon. Tyto druhy konstrukcí mohou narušovat schopnost optimalizátoru dotazů najít optimální plán provádění. Například, i když Forename je pokryta indexem, může dotaz stále vyžadovat úplné řazení namísto pouhého procházení indexu v pořadí.

Pokud je tomu tak a nemůžete žít s důsledky pro výkon, může být nutné mít samostatnou verzi dotazu pro každé možné pořadí řazení, což značně komplikuje věci na straně klienta.



  1. Říjen 2014CPU havaruje ArcGIS Desktop

  2. Simulace group_concat funkce MySQL v Microsoft SQL Server 2005?

  3. ORA-01264 ve fyzickém pohotovostním režimu

  4. Závažná chyba:operátor [] není pro řetězce podporován