Bạn có thể làm ngay bây giờ.
Tất cả các bạn cần phải làm là viết một phương pháp mở rộng mà sẽ đưa Query và PageSize và PAGENUMBER, sau đó bạn cần phải thêm dòng
OFFSET @PageSize * (@PageNumber - 1) ROWS FETCH NEXT @PageSize ROWS ONLY;
với truy vấn và thực hiện.
Lưu ý rằng truy vấn hoàn toàn yêu cầu mệnh đề ORDER-BY (ít nhất là trong T-SQL).
Điều này sẽ làm việc cho MS-SQL (2012+), PostgreSQL (8.4+) và Oracle (12c +).
Đối với MySQL, bạn phải thêm LIMIT offset, page_size.
LIMIT @PageSize * (@PageNumber - 1), @PageSize
Đối với Firebird, bạn phải nối thêm ROWS x ĐẾN y
ROWS (@PageSize * (@PageNumber - 1)) TO (@PageSize * @PageNumber -1)
Đối với một số cơ sở-1, nó sẽ là từ startoffset_base1 để endoffset_base1
StartAt @PageSize * (pagenum - 1) + 1 EndAt @PageSize * (pagenum - 1) + @PageSize
Ví dụ:
DECLARE @PageSize int
DECLARE @PageNumber int
SET @PageSize = 5
SET @PageNumber = 2
SELECT * FROM T_Users
ORDER BY USR_ID
-- Must contain "ORDER BY"
OFFSET @PageSize * (@PageNumber - 1) ROWS FETCH NEXT @PageSize ROWS ONLY;
Đối với cú pháp trên RDBMS khác nhau khác nhau, xem
http://www.jooq.org/doc/3.5/manual/sql-building/sql-statements/select-statement/limit-clause/
Mã xác nhận:
DECLARE @PageSize int
SET @PageSize = 5
;WITH CTE AS
(
SELECT 1 as pagenum
UNION ALL
SELECT pagenum+1 AS pagenum
FROM CTE
WHERE CTE.pagenum < 100
)
SELECT
pagenum
,@PageSize * (pagenum - 1) AS StartOFFSETBase0
--,@PageSize * (pagenum - 1) + @PageSize - 1 AS EndOFFSETBase0
,@PageSize * pagenum - 1 AS EndOFFSETBase0 -- Simplified
,@PageSize * (pagenum - 1) + 1 AS StartOFFSETBase1
,@PageSize * (pagenum - 1) + @PageSize AS EndOFFSETBase1
FROM CTE
Nguồn
2016-10-12 09:47:22
có, cũng cần ghi nhớ này được db phụ thuộc, oracle và mysql có giới hạn và bù đắp, Denali đã bù đắp và vân vân. –
** nơi ** nên ở bên trong truy vấn bên trong, phải không? Và bạn có lẽ nên có một trật tự ** rõ ràng bởi rownum ** trên truy vấn cuối cùng (cc @Sam) –
@Marc có bạn sẽ cần một đơn đặt hàng vào lúc đó kết thúc .. nơi có thể hoặc có thể không cần thiết trong truy vấn bên trong , đôi khi bạn có thể thêm TOP @y vào truy vấn bên trong để tăng mức hoàn hảo –