Phân trang sử dụng cursor trong Sql 2000

Phân trang sử dụng cursor trong Sql 2000

Chào các bạn. Mình xin giới thiệu với các bạn về Cursor trong SQL và cách sử dụng nó để dùng cho việc phân trang

Cursor giúp chúng ta có thể lấy dữ liệu vào trong bộ nhớ sau đó bạn có thể Fetch (nạp) lần lượt từng bản ghi  bằng cách Move Next.

Bây giờ mình xin giới thiệu cách dùng Cursor để phân trang mà mình đã học được từ Thầy của mình.

Giả sử mình có bảng được tạo ra như sau:

create table sitelinks
(
                           iid int primary key identity(1,1),
                           vurl varchar(100),
                           vdesc nvarchar(200)
)

Để phân trang thì đầu tiên ta cần phải biết được bạn muốn lấy ra trang thứ bao nhiêu và số bản ghi trả về là bao nhiêu. Stored Procedure như sau:

CREATE PROC padding @curentpage int, @returnrows int
AS
CREATE TABLE #tb_temp(iid int, vurl varchar(100), vdesc nvarchar(200))
DECLARE   padding_cursor SCROLL CURSOR
FOR
            SELECT * FROM sitelinks  
OPEN padding_cursor

DECLARE  @iid int

DECLARE   @vurl varchar(100)

DECLARE   @vdesc nvarchar(200) 

DECLARE   @from int

DECLARE   @count_of_rows int

DECLARE  @total_row int 

SET @from = @curentpage * @returnrows + 1

SET @total_row = @@cursor_rows 

BEGIN

SET @count_of_rows = @returnrows

            WHILE(@count_of_rows > 0)

            BEGIN

                        FETCH ABSOLUTE @from FROM padding_cursor INTO @iid, @vurl, @vdesc

                        INSERT INTO #tb_temp VALUES(@iid, @vurl, @vdesc)

                        SET @from = @from + 1

                        SET @count_of_rows = @count_of_rows -1

            END

END 

CLOSE padding_cursor 

DEALLOCATE padding_cursor 

SELECT * FROM #tb_temp

SELECT @total_row AS total_record

Ở đây chúng ta sẽ dùng một bảng tạm #tb_temp để insert lần lược từng bản ghi đựợc chọn, sau khi đã insert hết tất cả các bản ghi thì ta sẽ đóng con trỏ và gọi bảng #tb_temp ra.

Bây giờ bạn chỉ việc nhập dữ liệu vào bảng sitelinks và gọi Stored Procedure  “padding” ra. Ví dụ:

EXEC padding 0, 5

Sẽ lấy ra 5 bản ghi tại trang 1.

Hy vọng bài viết này sẽ giúp ích cho các bạn.

Tags: 
Bạn thấy bài viết này như thế nào?: 
No votes yet
Ảnh của Tommy Tran

Tommy Tran owner Express Magazine

Drupal Developer having 9+ year experience, implementation and having strong knowledge of technical specifications, workflow development. Ability to perform effectively and efficiently in team and individually. Always enthusiastic and interseted to study new technologies

  • Skype ID: tthanhthuy
  • Phone/Zalo: (+84) 944 225 212
  • WhatsApp: (+84) 944 225 212
  • Line Messenger: (+84) 944 225 212
  • Email: [email protected]
  • Telegram Messenger: https:/t.me/tommytran0401

Bình luận (0)

 

Add Comment

Plain text

  • No HTML tags allowed.
  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Tự động ngắt dòng và đoạn văn.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
12 + 5 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Nokia N9 Preview and First Look

Nokia N9 Preview and First Look

Technology has spread its arms to endless horizons where everyday new inventions come into existence in this world.

3 cách sắp xếp lại các fields trong Drupal

3 cách sắp xếp lại các fields trong Drupal

With all the software we teach, some tasks almost always confuse beginners.

Facebook muốn thân với Apple "diệt" Google+?

Facebook muốn thân với Apple "diệt" Google+?

Mark Zuckerberg đã nhận ra điểm mạnh của Google+ chính là được tích hợp vào hệ điều hành Android, hệ điều hành di động phổ biến nhất thế giới hiện nay. Android đang phát triển không ngừng, đồng nghĩa với việc ngày càng có nhiều người sử dụng Google+ trên thị trường điện thoại di động. Điều này trở thành một mối đe dọa khôn lường cho Facebook.

Wordpress Freelancer

 

Wordpress Freelancer