Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Đặt hàng Bằng cách sử dụng một tham số cho tên cột

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ên Forename .
  • 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SELECT DISTINCT bỏ qua các trường hợp khác nhau

  2. Tạo bảng HTML với SQL FOR XML

  3. 3 cách để có được ngày đầu tiên của tháng trong SQL Server

  4. Cách tạo Ràng buộc KIỂM TRA trong SQL Server (Ví dụ T-SQL)

  5. Di chuyển đám mây 101:Di chuyển từ SQL Server sang Azure