Phân trang trong Sql server 2005 sử dụng Row() Number

QL Server 2005 có một chức năng ROW_NUMBER có thể giúp với hồ sơ phân trang cho các bạn các ứng dụng cơ sở dữ liệu. ROW_NUMBER trả về một số tuần tự, bắt đầu từ 1, cho mỗi hàng trả lại trong một tập kết quả.

Nếu muốn trang đầu tiên hiện10 bản ghii được sắp xếp theo Ngày DESC,có thể sử dụng chức ROW_NUMBER như sau:

SELECT Description, Date
FROM (SELECT ROW_NUMBER() OVER (ORDER BY Date DESC)
AS Row, Description, Date FROM LOG)
AS LogWithRowNumbers
WHERE Row >= 1 AND Row <= 10

Trang thứ hai của bản ghi thứ 10 sau đó sẽ được như sau:

SELECT Description, Date
FROM (SELECT ROW_NUMBER() OVER (ORDER BY Date DESC)
AS Row, Description, Date FROM LOG)
AS LogWithRowNumbers
WHERE Row >= 11 AND Row <= 20

Nếu bạn có rất nhiều bản ghi, sử dụng TOP X trong mệnh đề SELECT bên trong có thể tăng tốc độ một chút như không có sử dụng trở lại 1.000 bản ghi nếu bạn chỉ đi để lấy bản ghi từ 11 đến 20:

SELECT Description, Date
FROM (SELECT TOP 20 ROW_NUMBER() OVER (ORDER BY Date DESC)
AS Row, Description, Date FROM LOG)
AS LogWithRowNumbers
WHERE Row >= 11 AND Row <= 20

Và Store

CREATE PROCEDURE dbo.ShowLog
@PageIndex INT,
@PageSize INT
AS

BEGIN

WITH LogEntries AS (
SELECT ROW_NUMBER() OVER (ORDER BY Date DESC)
AS Row, Date, Description
FROM LOG)

SELECT Date, Description
FROM LogEntries
WHERE Row between

(@PageIndex – 1) * @PageSize + 1 and @PageIndex*@PageSize

Về tieuyeuit
Lập trình viên Asp.net Tôi chia sẻ một,bạn chia sẻ một và chúng ta có rất nhiều!

2 Responses to Phân trang trong Sql server 2005 sử dụng Row() Number

  1. anhv nói:

    help me!
    Nếu như table có 5 triệu bảng ghi thì giải quyết performance cho nó như thế nào

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: