SQLServer 的資料分頁

2021-09-07 04:08:55 字數 1412 閱讀 3887

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

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

程式設計師的基礎教程:菜鳥程式設計師

SQLServer 的資料分頁

sqlserver 的資料分頁 假設現在有這樣的一張表 create table test id int primary key not null identity,names varchar 20 然後向裡面插入大約1000條資料,進行分頁測試 假設頁數是10,現在要拿出第5頁的內容,查詢語句如下...

Sql Server 資料分頁

1 引言 在列表查詢時由於資料量非常多,一次性查出來會非常慢,就算一次查出來了,也不能一次性顯示給客戶端,所以要把資料進行分批查詢出來,每頁顯示一定量的資料,這就是資料要分頁。2 常用的資料分頁語法 先查出 top 300000,再聚合取這個集合中最大的id1,再過濾 id大於id1的集合 上圖中使...

sqlserver 資料分頁 多個主鍵

在sqlserver中,資料庫的分頁一般結合top 和 not in 來實現,但這必須是表中只有乙個主鍵,如果有多個主鍵該怎麼做呢 現在有乙個表a 裡面有欄位 name schoolyear text 其中name 和 schoolyear為主鍵 如果要查詢 pagesize 條資料,第 page ...