Anda seharusnya dapat melakukan sesuatu seperti ini:
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;
- Tetapkan 1 ke
@OrderByColumn
untuk mengurutkanForename
. - Tugaskan 2 untuk mengurutkan
Surname
. - Dll... Anda dapat memperluas skema ini ke jumlah kolom yang berubah-ubah.
Hati-hati tentang kinerja sekalipun. Jenis konstruksi ini dapat mengganggu kemampuan pengoptimal kueri untuk menemukan rencana eksekusi yang optimal. Misalnya, meskipun Forename
dicakup oleh indeks, kueri mungkin masih memerlukan pengurutan lengkap alih-alih hanya melintasi indeks secara berurutan.
Jika itu masalahnya, dan Anda tidak dapat hidup dengan implikasi kinerja, mungkin perlu untuk memiliki versi kueri yang terpisah untuk setiap urutan pengurutan yang mungkin, sehingga memperumit banyak hal di sisi klien.