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