Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Các phương pháp phân trang của SQL Server 2008?

Thủ tục được lưu trữ T-SQL sau đây là một rất thực hiện phân trang hiệu quả. Trình tối ưu hóa SQL có thể tìm thấy ID đầu tiên rất nhanh. Kết hợp điều này với việc sử dụng ROWCOUNT và bạn có một cách tiếp cận vừa hiệu quả về CPU vừa hiệu quả về khả năng đọc. Đối với một bảng có nhiều hàng, nó chắc chắn đánh bại bất kỳ cách tiếp cận nào mà tôi đã thấy bằng cách sử dụng bảng hoặc biến bảng tạm thời.

NB:Tôi đang sử dụng cột nhận dạng tuần tự trong ví dụ này, nhưng mã hoạt động trên bất kỳ cột nào phù hợp để sắp xếp trang. Ngoài ra, ngắt trình tự trong cột đang được sử dụng không ảnh hưởng đến kết quả vì mã chọn một số hàng thay vì một giá trị cột.

CHỈNH SỬA:Nếu bạn đang sắp xếp trên một cột có các giá trị có khả năng không phải là duy nhất (ví dụ:LastName), thì hãy thêm cột thứ hai vào mệnh đề Order By để làm cho các giá trị sắp xếp trở lại duy nhất.

CREATE  PROCEDURE dbo.PagingTest
(
    @PageNumber int,
    @PageSize int
)
AS

DECLARE @FirstId int, @FirstRow int

SET @FirstRow = ( (@PageNumber - 1) * @PageSize ) + 1
SET ROWCOUNT @FirstRow

-- Add check here to ensure that @FirstRow is not
-- greater than the number of rows in the table.

SELECT   @FirstId = [Id]
FROM     dbo.TestTable
ORDER BY [Id]

SET ROWCOUNT @PageSize

SELECT   *
FROM     dbo.TestTable
WHERE    [Id] >= @FirstId
ORDER BY [Id]

SET ROWCOUNT 0
GO 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm các giá trị không phải số trong một cột trong SQL Server

  2. SQL Server Chèn hàng loạt tệp CSV với dấu ngoặc kép không nhất quán

  3. CROSS JOIN so với INNER JOIN trong SQL

  4. Trường hợp trong Tuyên bố Chọn

  5. Cách lấy danh sách tất cả các ngôn ngữ trong SQL Server (T-SQL)