SQLServerページングクエリーを4つの方法で実現
6239 ワード
SQLServerのデータページング:
このようなテーブルがあるとします.
次に約1000個のデータを挿入し、ページングテストを行い、ページ数が10であると仮定し、5ページ目の内容を取り出します.クエリー文は以下の通りです.
原理:データベースの5ページ目を出す必要があります.40-50の記録です.まず、データベースの上位40レコードのid値を取り出し、残りの10要素を取り出します.
2つ目の方法は、やはり上記の結果を例に、別の方法を採用することです.
原理:最初の40個のレコードをクエリーしてから、その最id値を取得し、id値がnullの場合、0を返し、最初の40個のレコードの最大id値より大きいレコードをクエリーします.このクエリにはidがintタイプでなければならないという条件があります.
3つ目の方法:
原理:まずテーブルのすべてのデータを1つのrowNumberでソートし、rownumberが40より大きいトップ10のレコードをクエリーします.この方法はoracleの1つのページング方式と似ていますが、2005バージョン以上の
4つ目:ストアド・プロシージャ・クエリー
転載先:https://www.cnblogs.com/wolfocme110/p/4232271.html
このようなテーブルがあるとします.
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