Giả sử tôi đang sử dụng cơ sở dữ liệu Northwind và tôi muốn chạy truy vấn thông qua một thủ tục được lưu trữ có chứa, trong số các tham số khác, sau:Truy vấn được phân trang bằng cách sắp xếp trên các cột khác nhau bằng ROW_NUMBER() OVER() trong SQL Server 2005
@Offset
để chỉ ra nơi pagination bắt đầu,@Limit
để chỉ ra kích thước trang,@SortColumn
để chỉ ra cột được sử dụng cho các mục đích phân loại,@SortDirection
, để chỉ ra tăng dần hoặc phân loại hậu duệ.
Ý tưởng là thực hiện phân trang trên cơ sở dữ liệu, vì tập kết quả chứa hàng nghìn hàng nên bộ nhớ đệm không phải là tùy chọn (và sử dụng VIEWSTATE thậm chí không được coi là IMO, sucks).
Như bạn đã biết SQL Server 2005 cung cấp các chức năng ROW_NUMBER mà trả về số tuần tự của một hàng trong một phân vùng của một tập kết quả, bắt đầu từ 1 cho dòng đầu tiên trong mỗi phân vùng.
Chúng tôi cần phân loại trên mỗi cột được trả lại (năm trong ví dụ này) và SQL động không phải là một tùy chọn, vì vậy chúng tôi có hai khả năng: sử dụng nhiều IF ... ELSE ...
và có 10 truy vấn, đó là địa ngục để duy trì hoặc truy vấn như sau:
Tôi đã thử truy vấn nhiều lần, với các đối số khác nhau và hiệu suất của nó khá tốt, nhưng vẫn có vẻ như nó có thể được tối ưu hóa theo một cách khác.
Có vấn đề gì với truy vấn này hay bạn sẽ làm theo cách này? Bạn có đề xuất một cách tiếp cận khác không?
Lỗi ngu ngốc của tôi, đã khắc phục điều đó. Vui lòng thử lại. – Tomalak