Giải pháp phân trang hiệu quả nhất khi sử dụng SQL Server 2005 dựa vào bảng có khoảng 5.000-10.000 hàng là gì? Tôi đã nhìn thấy một số ra có nhưng không có gì so sánh chúng.Giải pháp phân trang tốt nhất bằng SQL Server 2005?
Trả lời
Đối với bảng có kích thước, hãy sử dụng biểu thức bảng chung (CTE) và ROW_NUMBER; sử dụng một hàm nhỏ để tính toán các bản ghi để mang lại dựa trên các biến số @PageNumber
và @PageSize
(hoặc bất kỳ thứ gì bạn muốn gọi chúng). ví dụ đơn giản từ một trong những thủ tục được lưu trữ của chúng tôi:
-- calculate the record numbers that we need
DECLARE @FirstRow INT, @LastRow INT
SELECT @FirstRow = ((@PageNumber - 1) * @PageSize) + 1,
@LastRow = ((@PageNumber - 1) * @PageSize) + @PageSize
;
WITH CTE AS
(
SELECT [Fields]
, ROW_NUMBER() OVER (ORDER BY [Field] [ASC|DESC]) as RowNumber
FROM [Tables]
WHERE [Conditions, etc]
)
SELECT *
-- get the total records so the web layer can work out
-- how many pages there are
, (SELECT COUNT(*) FROM CTE) AS TotalRecords
FROM CTE
WHERE RowNumber BETWEEN @FirstRow AND @LastRow
ORDER BY RowNumber ASC
Bạn có phải đợi cho proc chạy một lần trước khi bạn có thể nhận được tổng số trang không? – Caveatrob
PS - điều này đang hoạt động tốt cho đến nay! – Caveatrob
Có - cách chúng tôi làm là sử dụng kết quả của proc để điền một đối tượng PagingInfo nhỏ xử lý quá trình viết ra các liên kết số trang. Giả sử bạn không làm một số lượng điên tham gia hoặc các cuộc gọi chức năng trong truy vấn, em bé này nên chạy gần như ngay lập tức, vì vậy nó không bao giờ là một vấn đề đối với chúng tôi. Rất vui khi nó hoạt động cho bạn :) –
Một trong những cuộc thảo luận tốt nhất của kỹ thuật phân trang khác nhau mà tôi từng đọc ở đây: SQL Server 2005 Paging – The Holy Grail. Bạn sẽ phải hoàn tất đăng ký miễn phí trên SQLServerCentral.com để xem bài viết, nhưng cũng rất đáng để đăng ký.
Thậm chí điều này sẽ giúp ..
SELECT * FROM
(
SELECT Row_Number() OVER(order by USER_ID) As RowID,
COUNT (USER_ID) OVER (PARTITION BY null) AS TOTAL_ROWS,
select name from usertbl
)
As RowResults WHERE
RowID Between 0 AND 25
Không chắc chắn nếu nó tốt hơn so với phiên bản @keith.
- 1. Phân trang SQL Server 2005 Kết quả
- 2. Isoweek trong SQL Server 2005
- 3. SQL Server 2005 Replication
- 4. Cách cập nhật trình phân giải xung đột khi nâng cấp từ SQL Server 2005 lên SQL-Server 2008
- 5. Phương pháp phân trang hiệu quả thông qua bộ kết quả rất lớn trong SQL Server 2005 là gì?
- 6. Truy vấn phân cấp trong SQL Server 2005
- 7. Thực hành tốt nhất cho FTP từ thủ tục lưu trữ SQL Server 2005 là gì?
- 8. SQL Server 2005 Ràng buộc duy nhất trên hai cột
- 9. SQL server 2005 mất chính xác số
- 10. CHECKSUM() va chạm trong SQL Server 2005
- 11. Vấn đề chặn SQL Server 2005 (ASYNC_NETWORK_IO)
- 12. Giải pháp WURFL nguồn mở tốt nhất
- 13. Cách tốt nhất để phân trang kết quả bằng php
- 14. Giải pháp thay thế tốt cho SQL Server cho các ứng dụng ASP.NET là gì?
- 15. SQL Server 2005: Nullable Foreign Key Constraint
- 16. Số Ba Tư trong SQL Server 2005
- 17. Chính xác SQL Server 2005 là gì?
- 18. Đổi tên một cột trong MS SQL Server 2005
- 19. Java + SQL Server - một giải pháp khả thi?
- 20. Các phương pháp hay nhất về lược đồ SQL Server
- 21. Phương pháp tốt nhất trong việc truyền một số lượng lớn tham số trong SQL Server
- 22. Hạ cấp máy chủ SQL 2008 sang SQL Server 2005
- 23. SQL Server 2005 UniqueIdentifier và C# Kiểu dữ liệu
- 24. Khung thực thể và phân trang SQL Server 2012
- 25. Giải pháp lưu trữ dữ liệu SQL Server
- 26. Cách tốt nhất để tạo tập lệnh SQL Server rollback?
- 27. Truy vấn được phân trang bằng cách sắp xếp trên các cột khác nhau bằng ROW_NUMBER() OVER() trong SQL Server 2005
- 28. Phân trang dữ liệu trong SQL Server CE (Compact Edition)
- 29. Cách ánh xạ uint trong NHibernate với SQL Server 2005
- 30. Cách tốt hơn để Bắt Tổng số Đếm cùng với Phân trang trong SQL Server 2012
có thể trùng lặp với [ASP.NET, SQL 2005 "hoán trang"] (http://stackoverflow.com/questions/1058825/asp-net-sql-2005-paging) – M4N
Nhiều: http://stackoverflow.com/question/tagged/pagination + sql-server –