Bạn sẽ có thể làm điều gì đó như sau:
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;
- Gán 1 cho
@OrderByColumn
để sắp xếp trênForename
. - Gán 2 để sắp xếp theo
Surname
. - Vv ... bạn có thể mở rộng lược đồ này thành số cột tùy ý.
Hãy cẩn thận về hiệu suất mặc dù. Những loại cấu trúc này có thể cản trở khả năng của trình tối ưu hóa truy vấn để tìm ra một kế hoạch thực thi tối ưu. Ví dụ:ngay cả khi Forename
được bao phủ bởi chỉ mục, truy vấn vẫn có thể yêu cầu sắp xếp đầy đủ thay vì chỉ duyệt qua chỉ mục theo thứ tự.
Nếu đúng như vậy và bạn không thể sống với các hàm ý về hiệu suất, có thể cần phải có một phiên bản truy vấn riêng cho từng thứ tự sắp xếp có thể, làm phức tạp mọi thứ đáng kể ở phía máy khách.