SQL實現分頁

2021-04-13 05:54:34 字數 2698 閱讀 2861

表中主鍵必須為標識列,[id] int identity (1,1)

1、分頁方案一:(利用not in和select top分頁)

語句形式:

select top 10*

from 表

where(id not in

(select top20id

from 表

order by id)ast)

order by id

select top 頁記錄條數*

from 表

where(id not in

(select top 頁記錄數*頁數 id

from 表

order by id)ast)

order by id

2、分頁方案二:(利用id大於多少和select top分頁)

語句形式:

select top 10*

from testtable

where(id>

(selectmax(id)

from(selecttop20id

fromtesttable

orderbyid)ast))

orderbyid

selecttop頁大小*

fromtesttable

where(id>

(selectmax(id)

from(selecttop頁大小*頁數id

from表

orderbyid)ast))

orderbyid3、分頁方案三:(利用sql的游標儲存過程分頁)

create proceduresqlpager

@sqlstrnvarchar(4000),--查詢字串

@currentpageint,--第n頁

@pagesizeint--每頁行數

assetnocounton

declare@p1int,--p1是游標的id

@rowcountint

execsp_cursoropen@p1output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcountoutput

selectceiling(1.0*@rowcount/@pagesize)as總頁數--,@rowcountas總行數,@currentpageas當前頁

set@currentpage=(@currentpage-1)*@pagesize+1

execsp_cursorfetch@p1,16,@currentpage,@pagesize

execsp_cursorclose@p1

setnocountoff其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。

建議優化的時候,加上主鍵和索引,查詢效率會提高。

以上三種方案的比較:

分頁方案二:(利用id大於多少和select top分頁)效率最高,需要拼接sql語句

分頁方案一:(利用not in和select top分頁) 效率次之,需要拼接sql語句

分頁方案三:(利用sql的游標儲存過程分頁) 效率最差,但是最為通用

4、方案四:

使用top

1.利用當前記錄號(currentnote)和分頁頁面大小(pagesize)進行分頁

create procdure getnextpageinfo2

@pagesize

int, --頁面記錄數

@currentnote

int --當前記錄號 as

declare @sql nvarchar(200) 

set @sql=n'

select

top '+

convert(

varchar(10),@pagesize)+ '

* from 表 where 主鍵 > ' +

convert(

varchar(10),@currentnote) 

execute

sp_executesql @sqlgo

2.利用本頁頁碼和分頁頁面大小進行分頁

create procdure getnextpageinfo

@pagesize int, --每頁記錄數

@page int --當前頁碼 as

declare @jilu big int

set @jilu=(@pagesize*@page)

declare @sql nvarchar(200) 

set @sql=n'select top '+

convert(varchar(10),@pagesize)+ ' * from 表 where 主鍵 not in (select top ' +

convert(varchar(10),@jilu) + ' 主鍵 from 表 order by 主鍵) order by 主鍵' 

execute

sp_executesql @sqlgo

兩種方式比較:第一種執行效率應該高於第二種,不過在id號多變的情況下第二種方法使用起來相對簡單。

2、 使用rowcount

sql語句實現分頁

sql語句實現分頁 sqlstr select top 10 from shebei where id not in select top cint pagenum 1 10 id from shebei order by id desc order by id desc 計算總頁數 dimstr ...

SQL 實現分頁查詢

原文 sql 實現分頁查詢 在查詢資料中,對於某些資料量過大,為了減少頁面上單頁的載入時間,我們常常會選擇分頁查詢,分頁查詢有很多方法,下面主要介紹兩種分頁方法。一.通過主鍵來實現分頁 1.資料庫背景.person表,id主鍵盤,自增1,varchar行name.2.裡面包含了10條資料。3.可以通...

sql 語句實現分頁

select top 每頁顯示的資料量 from 表名 where 主鍵或者其他字段 select isnull max 主鍵或者其他字段 0 from select top 每頁顯示的數量量 第幾頁 主鍵或者其他字段 from 表名 order by 主鍵或者其他字段 a order by 主鍵或...