[轉]四種方式實現SQLServer 分頁查詢

來源:互聯網
上載者:User

標籤:

http://www.cnblogs.com/Bulid-For-NET/archive/2012/12/16/2820097.html

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
) A
where rownumber > 40
原理:先把表中的所有資料都按照一個rowNumber進行排序,然後查詢rownuber大於40的前十條記錄
這種方法和oracle中的一種分頁方式類似,不過只支援2005版本以上的

第四種:
預存程序查詢
建立預存程序
alter procedure pageDemo
@pageSize int,
@page int
AS
declare @temp int
set @[email protected]*(@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 分頁查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.