sql server實現分頁

2021-07-10 17:54:12 字數 2675 閱讀 4978

sqlserver 的資料分頁:

假設現在有這樣的一張表:

create table test

(id int primary key not null identity,

names varchar(20)

)然後向裡面插入大約1000條資料,進行分頁測試

假設頁數是10,現在要拿出第5頁的內容,查詢語句如下:

--10代表分頁的大小

select top 10 *

from test

where id not in

(--40是這麼計算出來的:10*(5-1)

select top 40 id from test order by id

)order by id

原理:需要拿出資料庫的第5頁,就是40-50條記錄。首先拿出資料庫中的前40條記錄的id值,然後再拿出剩餘部分的前10條元素

第二種方法:

還是以上面的結果為例,採用另外的一種方法

--資料的意思和上面提及的一樣

select top 10 *

from test

where id >

(select isnull(max(id),0)

from 

(select top 40 id from test order by id

) a)

order by id

原理:先查詢前40條記錄,然後獲得其最id值,如果id值為null的,那麼就返回0

然後查詢id值大於前40條記錄的最大id值的記錄。

這個查詢有乙個條件,就是id必須是int型別的。

第三種方法:

select top 10 *

from 

(select row_number() over(order by id) as rownumber,* from test

) awhere rownumber > 40

原理:先把表中的所有資料都按照乙個rownumber進行排序,然後查詢rownuber大於40的前十條記錄

這種方法和oracle中的一種分頁方式類似,不過只支援2005版本以上的

第四種:

儲存過程查詢

建立儲存過程

alter procedure pagedemo

@pagesize int,

@page int

asdeclare @temp int

set @temp=@pagesize*(@page - 1)

begin

select top (select @pagesize) * from test where id not in (select top (select @temp) id from test) order by id

end執行儲存過程

exec 10,5

use [wechatjt]

go/****** object: storedprocedure [dbo].[pagequery] script date: 04/27/2016 17:48:49 ******/

set ansi_nulls on

goset quoted_identifier on

goalter procedure [dbo].[pagequery]

@pagesize int,

@pagenum int,

@tablename varchar(50) --

asdeclare @temp varchar(max)

declare @sqlcommand varchar(max) --sql名稱串變數

set @temp=@pagesize*(@pagenum - 1)

set @sqlcommand = 'select top (select '+ convert(varchar(12), @pagesize)+')*

from '+@tablename + '

where id not in (

select top (select '+ convert(varchar(12), @temp) +') id

from '+ @tablename +' order by create_time

) order by create_time'

--構造

begin

--print @sqlcommand

exec(@sqlcommand ) --執行sql命令

end

執行declare @pagesize varchar(max), @pagenum varchar(max),@tablename varchar(50)

set @pagesize=10

set @pagenum=2

set @tablename='jt_access_token'

exec pagequery @pagesize,@pagenum,@tablename

或者 這樣執行
exec pagequery 10,2,'jt_access_token'

sql server實現分頁查詢

資料庫分頁查詢 一 mysql 資料庫分頁查詢 mysql資料庫實現分頁比較簡單,提供了limit函式。一般只需要直接寫到sql語句後面就行了。limit子句可以用來限制由select語句返回過來的資料數量,它有乙個或兩個引數,如果給出兩個引數,第乙個引數指定返回的第一行在所有資料中的位置,從0開始...

sql server 實現分頁方法

var ipage getpage 獲取當前頁 var ipagesize 20 每頁的記錄數量 var sql select top ipagesize id,user from users where age 18 and id not in select top ipagesize ipage...

SQL SERVER儲存過程實現分頁

create procedure dbo sp pagelist 建立儲存過程 stationid nvarchar 32 工位id pagesize int,每頁顯示的項數 pageindex int 當前頁數 as begin 獲取總行數,用count declare sqlselect nva...