Sắp xếp động trong SQL Server

Tạo câu SQL để Sắp xếp động trong SQL Server

Một câu sắp xếp SQL thì rất đơn giản

Select Ten,Lop,Diem From tbHocVien Order by Ten Desc
Như vậy sẽ sắp xếp tên học viên theo thứ tự giảm dần

Nhưng khi bạn làm phần mềm thì việc sắp xếp cột nào thì do người dùng lựa chọn

Khách hàng muốn sắp xếp theo ten hay theo lop , hay theo điểm. Như vậy bạn phải viết 3 câu SQL rất dài và khó bảo hành bảo trị khi sử dụng phần mềm.

Vậy có 1 giải pháp để tạo câu SQL sắp xếp động

Ví dụ tôi đang làm 1 phần mềm bán hàng, khách hàng xem chứng từ thì họ có mục chọn cột cần sắp xếp:

So,TenKhuVuc,TenKhachHang
Tăng dần / giảm dần

Có nhiều cách code, 1 cách dễ là nối chuổi lại rồi thực câu SQL, nhưng cách này không bảo mật dễ bị lỗi bảo mật SQL SQL injection.

Cách dưới đây bạn sẽ thực thi để sắp xếp động trong sql server và bảo mật hơn.


DECLARE @SortColumn NVARCHAR(50) = 'TenKhuVuc'
DECLARE @SortOrder NVARCHAR(4) = 'DESC'

SELECT *
FROM tbchungtu
ORDER BY
  CASE WHEN @SortOrder = 'ASC' THEN
    CASE @SortColumn
      WHEN 'So' THEN So
      WHEN 'TenKhuVuc' THEN TenKhuVuc
      WHEN 'TenKhachHang' THEN TenKhachHang
    END
  END ASC,
  CASE WHEN @SortOrder = 'DESC' THEN
    CASE @SortColumn
      WHEN 'So' THEN So
      WHEN 'TenKhuVuc' THEN TenKhuVuc
      WHEN 'TenKhachHang' THEN TenKhachHang
    END
  END DESC

Cách code sắp xếp động sql server này hơi dài nhưng nó đảm bảo tính bảo mật cho người dùng không bị tấn cần server sql server

chú ý: các cột sắp xếp động phải cùng kiểu dữ liêu sql server, nếu khác ta cần conver cùng kiểu với nhau

Dynamic Sorting in SQL Server

Tạo câu SQL để Sắp xếp động trong SQL Server