儲存過程分頁

2022-08-31 04:00:10 字數 1769 閱讀 8095

一次從資料庫的表裡取多少資料出來和gridview或者datagrid繫結或者其他容器,這可能是每個程式設計師都會碰到的問題。每個人採取的方式可能不一樣,但也都是大同小異。

其中可以用到一種很簡單的子查詢來實現這個過程,sql語句:

select top [數字]  field1,field2,.... from [表名] where pk not in (select top  [數字]*pk from [表名])

^_^【數字】需要做處理,應該不用我細說了吧,其實想想這樣做到話如果取第901-1000之間的100條記錄,那不是要將前面的900條全遍歷完以後才能拿到目標資料。把這個效果擴大一下,如果有100000000...... 總之很多了,取越靠後的資料遍歷的資料也越多,那樣和一次將資料全取出的效果也差不多了。所以這個只能適應較少資料的情況,那麼當資料量大了怎麼辦呢,可以參考下面:

alter procedure [dbo].[usp_getpagerecord]

@pageindex int,              --從第幾行記錄開始分頁

@returnpagenumber int  --每頁要返回的記錄行數

asdeclare cursor_page scroll cursor

forselect fied1,filed2,fied3 from valuetest

open cursor_page

declare

@a1 varchar(50),         --用於向臨時表轉資料的變數,對應表的第1個字段

@a2 varchar(50),         --用於向臨時表轉資料的變數,對應表的第2個字段

@a3 varchar(50),         --用於向臨時表轉資料的變數,對應表的第3個字段

@i int ,         --乙個用於迴圈的變數

@t int,          --該變數用於游標定位

@rowcount int    --對應表記錄總數

set @i=1 --初始化迴圈變數

select @rowcount=count(*) from valuetest

create table #b(id int,valuey varchar(50),cientid int)--構建臨時表b

while @i<=@returnpagenumber                  --開始添充臨時表的迴圈

begin

set @t=@pageindex + @i  --指定開始的記錄數

if @t>@rowcount break

fetch absolute @t from cursor_page into @a1,@a2,@a3 --使用游標所在行的記錄充臨時變數

insert into #b(id,valuey,cientid) values(@a1,@a2,@a3)  --將臨時變數值存入臨時表中

set @i=@i+1 --記數器變裡加1

end           ---------------------------------結束迴圈

select id,valuey,cientid from #b       --儲存過程所返回的表,即分頁資料

drop table #b              --銷毀臨時表

close cursor_page      --關閉游標

deallocate cursor_page --銷毀游標

這其中可以將表名做修改,就滿足自己的需求了。引數也需要辦法修改,那樣就能適合整個專案,而不是針對單錶分頁了,嘻嘻,留給大家發揮了。

分頁儲存過程 分頁儲存過程

分頁儲存過程 alter proc dbo p pageshow pagesize int,每頁大小 currentpage int out,當前頁 housename nvarchar 50 房產名稱 totalcount int out,總記錄數 totalpage int out 總頁數 as...

分頁儲存過程

create proc p sobigo percentpage tblname varchar 255 t category 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pag...

分頁儲存過程

create procedure pro select pageindex int,pagesize int as select student.sno,student.sname,student.s grade.math,grade.physics,grade.huaxue,grade.chine...