Trong SQL Server 2012, có hỗ trợ cho tiêu chuẩn ANSI OFFSET
/ FETCH
cú pháp. Tôi đã viết blog về cái này
và đây là tài liệu chính thức (đây là phần mở rộng của ORDER BY
). Cú pháp của bạn được chuyển đổi cho SQL Server 2012 sẽ là:
SELECT ID, Name, Price, Image
FROM Products
ORDER BY ID ASC
OFFSET (@start_from - 1) ROWS -- not sure if you need -1
-- because I don't know how you calculated @start_from
FETCH NEXT @items_on_page ROWS ONLY;
Trước đó, bạn cần sử dụng nhiều cách giải quyết khác nhau, bao gồm ROW_NUMBER()
phương pháp. Xem bài viết này
và thảo luận tiếp theo
. Nếu bạn không sử dụng SQL Server 2012, bạn không thể sử dụng cú pháp chuẩn hoặc LIMIT
không chuẩn của MySQL nhưng bạn có thể sử dụng một giải pháp dài dòng hơn như:
;WITH o AS
(
SELECT TOP ((@start_from - 1) + @items_on_page)
-- again, not sure if you need -1 because I
-- don't know how you calculated @start_from
RowNum = ROW_NUMBER() OVER (ORDER BY ID ASC)
/* , other columns */
FROM Products
)
SELECT
RowNum
/* , other columns */
FROM
o
WHERE
RowNum >= @start_from
ORDER BY
RowNum;
Có nhiều cách khác để lột da con mèo này, đây không phải là cách hiệu quả nhất nhưng về mặt cú pháp có lẽ là cách đơn giản nhất. Tôi khuyên bạn nên xem lại các liên kết mà tôi đã đăng cũng như các đề xuất trùng lặp được ghi chú trong các nhận xét cho câu hỏi.