小練習 分頁儲存過程

2021-08-25 08:42:49 字數 2116 閱讀 2113

create database dbtest

use dbtest

if exists(select * from sysobjects where name='pagetest')

drop table pagetest

go--建立測試表

create table pagetest

(id int identity(1,1) not null,

col01 int null,

col02 nvarchar(50) null,

col03 datetime null

)--1萬記錄集

declare @i int

set @i=0

while(@i<10000)

begin

insert into pagetest select cast(floor(rand()*10000) as int),left(newid(),10),getdate()

set @i=@i+1

end--開始建立儲存過程

if exists(select * from sysobjects where name='proc_2')

drop proc proc_2

gocreate proc proc_2

--輸入引數

@pagesize int,--每頁記錄條數5

@pageindex int,--當前要檢視第幾頁的記錄1

@name nvarchar(50), --查詢字段

--@id int,            --查詢字段

--輸出引數

@recordcount int output,--總的記錄的條數

@pagecount int output --總的頁數

asbegin

select * into #pagetest_1 from  (select *,rn = row_number() over(order by pagetest.id asc) from pagetest where 1=1 and col02 like  '%' + @name + '%') as s --建立臨時表

select  * from (select * from (select *,rn = row_number() over(order by pagetest.id asc) from pagetest where 1=1 and col02 like  '%' + @name + '%') as s

where rn between (@pageindex - 1)*@pagesize+1 and @pageindex*@pagesize)

as t  where 1=1 --具體語句

set @recordcount = (select count(*) from #pagetest_1)

set @pagecount= ceiling(@recordcount*1.0/@pagesize)  --乘以1.0轉成flot型, 然後celling 「進一法」取值

enddeclare @re int, @pa int

exec proc_2 @pagesize = 10,@pageindex = 1,@name = 'b',@recordcount = @re output,@pagecount = @pa output

print @re

print @pa 

第一次發布部落格,學的比較淺,所以寫的東西不深,其中也有一部分是借鑑網上的**,比如新增1w調資料,然後就是說發表一下自己的意見,這個是帶查詢變數的分頁,這只是個基本的雛形,至於想要帶幾個字段查詢看各自的業務需求,我就說一下我感覺比較關鍵的幾個地方就是 

rn = row_number() over(order by pagetest.id asc)

新生成rn列記錄排序,然後根據

(@pageindex - 1)*@pagesize+1 開始,到@pageindex*@pagesize結束,就是顯示的(頁碼-1)*顯示的行數+1 //為了讓讓起始資料從第一條資料開始,到後面的頁碼*現實的行數就很好理解了。至於那張臨時表的話,我是為了下面的輸出當前的頁數和當前的所有資料行數準備的。剩下的大家看看注釋就應該能懂。畢竟都是大佬哈。

如果有不對的地方,請各位大佬即時點出,我會即時改正,以免誤人子弟。

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

分頁儲存過程 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...