Tôi có SP sau mà tôi đang sử dụng để phân trang danh sách các bài báo. Như bạn có thể đoán, @count
là số hàng cần trả về, @start
là chỉ mục để chọn các hàng từ (được sắp xếp theo truy vấn bên trong), @orderby
cho biết cột cần sắp xếp theo và @orderdir
cho biết có sắp xếp một hướng hay không khác. Truy vấn ban đầu của tôi là here, trước khi tôi thêm thông số @orderdir
.DESC và ASC làm tham số trong thủ tục lưu sẵn
ALTER PROCEDURE [mytable].[news_editor_paginate]
@count int,
@start int,
@orderby int,
@orderdir int
AS
BEGIN
SET NOCOUNT ON;
SELECT TOP (@count) * FROM
(
SELECT ne.*,n.publishstate,
(CASE WHEN @orderdir = 1 THEN
ROW_NUMBER() OVER (
ORDER BY
CASE WHEN @orderby = 0 THEN ne.[time] END DESC,
CASE WHEN @orderby = 1 THEN ne.lastedit END DESC,
CASE WHEN @orderby = 2 THEN ne.title END ASC
)
WHEN @orderdir = 2 THEN
ROW_NUMBER() OVER (
ORDER BY
CASE WHEN @orderby = 0 THEN ne.[time] END ASC,
CASE WHEN @orderby = 1 THEN ne.lastedit END ASC,
CASE WHEN @orderby = 2 THEN ne.title END DESC
)
END
) AS num
FROM news_edits AS ne
LEFT OUTER JOIN news AS n
ON n.editid = ne.id
)
AS a
WHERE num > @start
END
Hiện tại không có gì sai, nhưng thông số @orderby
không hoạt động. Nếu cung cấp 1 làm thông số @orderdir
, nó sẽ cho tôi kết quả chính xác giống như nếu tôi cung cấp 2 làm tham số đó.
Yup mà làm việc một cách chính xác làm thế nào tôi muốn, có vẻ như quá rõ ràng bây giờ bạn đã viết nó xuống. Cảm ơn, phải đợi để đánh dấu câu trả lời này là câu trả lời. –
Không đổ mồ hôi. Trầy xước đầu của tôi về công cụ này một vài lần trước khi row_number xuất hiện. – Gats