次のようなことができるはずです:
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;
- 1を
@OrderByColumn
に割り当てますForename
で並べ替える 。 - 2を割り当てて
Surname
で並べ替えます 。 - その他...このスキームを任意の数の列に拡張できます。
ただし、パフォーマンスには注意してください。これらの種類の構成は、クエリオプティマイザが最適な実行プランを見つける機能を妨げる可能性があります。たとえば、Forename
インデックスでカバーされている場合でも、クエリはインデックスを順番にトラバースするのではなく、完全な並べ替えを必要とする場合があります。
その場合、パフォーマンスへの影響に耐えられない場合は、可能な並べ替え順序ごとに個別のバージョンのクエリを用意する必要があり、クライアント側でかなり複雑になります。