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
SQLServer 的資料分頁
假設現在有這樣的一張表 create table test id int primary key not null identity,names varchar 20 然後向裡面插入大約1000條資料,進行分頁測試 假設頁數是10,現在要拿出第5頁的內容,查詢語句如下 10代表分頁的大小 selec...
Sql Server 資料分頁
1 引言 在列表查詢時由於資料量非常多,一次性查出來會非常慢,就算一次查出來了,也不能一次性顯示給客戶端,所以要把資料進行分批查詢出來,每頁顯示一定量的資料,這就是資料要分頁。2 常用的資料分頁語法 先查出 top 300000,再聚合取這個集合中最大的id1,再過濾 id大於id1的集合 上圖中使...
sqlserver 資料分頁 多個主鍵
在sqlserver中,資料庫的分頁一般結合top 和 not in 來實現,但這必須是表中只有乙個主鍵,如果有多個主鍵該怎麼做呢 現在有乙個表a 裡面有欄位 name schoolyear text 其中name 和 schoolyear為主鍵 如果要查詢 pagesize 條資料,第 page ...