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 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

Bình luận (0)

 

Add Comment

Filtered HTML

  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Các thẻ HTML được chấp nhận: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Tự động ngắt dòng và đoạn văn.

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.

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

 
Cầu thủ Oscar - 4 năm anh đút túi 100 triệu đô sau thuế

Cầu thủ Oscar - 4 năm anh đút túi 100 triệu đô sau thuế

Từ chỗ được đánh giá cao hơn Kevin De Bruyne, Oscar bây giờ không được CLB châu Âu nào ngó ngàng và mất vị trí trên tuyển Brazil suốt 5 năm qua

Black SEO tốt hay xấu ?

Black SEO tốt hay xấu ?

Nếu bạn là người nguyên cứu về SEO, black SEO có thể mở mang tầm mắt của bạn. Nếu bạn là người thực hiện SEO...

Hướng dẫn sử dụng Drupal's own AJAX để làm Dynamically Load Content

Hướng dẫn sử dụng Drupal's own AJAX để làm Dynamically Load Content

With Drupal 7 a new system ajax file is included that allows for easy integration with your own module.

Công ty diệt chuột T&C

 

Diet con trung