Thursday , 24 August 2017
HOT

Phân trang trong sql server

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

Leave a Reply

Your email address will not be published. Required fields are marked *

*

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

More in MSSQL Server (1 of 26 articles)


Trong ứng dụng khi cần tương tác với database, có lẽ một cách làm rất phổ biến là tạo lập một chuỗi chứa lệnh SQL, ghép các giá trị  nhập vào của người dùng thành một lệnh SQL hoàn chỉnh, rồi thực...