最近維護乙個老專案,專案需要分頁取資料,之前很久都用ef框架開發,突然要用sql分頁有點茫然,於是總結了一些sql server sql分頁的思路,以便加深記憶。
一:用top排序的方式
1declare
@pagesize
int=202
declare
@pageindex
int=23
4select
top ( @pagesize)5
*6from ( select
top ( @pagesize
*@pageindex)7
*8from
test
9order
by userid asc
10) table1
11order
by table1.userid desc
二:用字段 not in的方式
1declare
@pagesize
int=202
declare
@pageindex
int=23
4select
top ( @pagesize)5
*6from
dbo.test
7where userid not
in ( select
top ( @pagesize
* ( @pageindex-1
) )8
userid
9from
dbo.test
10order
by userid asc)11
order
by dbo.test.userid asc
三:用字段大小範圍的判斷的方式
1declare
@pagesize
int=202
declare
@pageindex
int=13
4select
top ( @pagesize)5
*6from
dbo.test
7where userid > ( select
isnull(max(userid), 0)8
from ( select
top ( @pagesize
* ( @pageindex-1
) )9*10
from
dbo.test
11order
by userid asc
12) table113)
14order
by dbo.test.userid asc
四:row_number 方式
1declare
@pagesize
int=202
declare
@pageindex
int=23
4declare
@start
int=
@pagesize
* ( @pageindex
-1 ) +15
declare
@end
int=
@pagesize
*@pageindex67
select*8
from ( select row_number() over ( order
by userid ) as
rownumber ,9*
10from
dbo.test
11) table1
12where rownumber between
@start
and@end
總結:以上四種方式自己沒有親測具體的查詢效率,根據網上的說法,第四種方式的效率應該是最慢的,但它也是最通用的,因為前三種方式必須有可排序的字段,如果沒有可排序的字段比如(guid 主鍵),這時用row_number 方式則可以解決。
SQL Server分頁查詢的幾種方式
sql server中分頁查詢 1 第一種寫法,僅支援sql server2005後的 row nubmer over order by asc desc select from select row number over order by studentno as myid from stude...
SQL查詢的幾種方式
1 左連線 left join 或者 left outer join 2 左連線 table a表資料全部顯示,table b根據條件匹配table a 匹配上顯示,否則顯示null 3 select from table a 4 select from table b 5 select from ...
SQL查詢的幾種方式
1 左連線 left join 或者 left outer join 2 左連線 table a表資料全部顯示,table b根據條件匹配table a 匹配上顯示,否則顯示null 3 select from table a 4 select from table b 5 select from ...