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í podleForename
. - 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.