SQLServerページングクエリーを4つの方法で実現

6239 ワード

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要素を取り出します.
2つ目の方法は、やはり上記の結果を例に、別の方法を採用することです.
-- 
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を返し、最初の40個のレコードの最大id値より大きいレコードをクエリーします.このクエリにはidがintタイプでなければならないという条件があります.
3つ目の方法:
select top 10 *
from 
(
   select row_number() over(order by id) as rownumber,* from test
) A
where rownumber > 40

 
原理:まずテーブルのすべてのデータを1つのrowNumberでソートし、rownumberが40より大きいトップ10のレコードをクエリーします.この方法はoracleの1つのページング方式と似ていますが、2005バージョン以上の
4つ目:ストアド・プロシージャ・クエリー
-- 
alter procedure pageDemo
@pageSize int,
@page int
AS
declare @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 pageDemo 10,5

 
転載先:https://www.cnblogs.com/wolfocme110/p/4232271.html