MS SQL 兩種分頁

2022-04-01 09:17:50 字數 3106 閱讀 1407

------ row number ----------

--

---- row number ----------

declare

@pagesize

int,@pageindex

intset

@pagesize

=20;set

@pageindex=2

select

*from

(select row_number() over(order

by byod_zzfp.id desc) as

rowid

,byod_zzfp.

*from byod_zzfp where1=

1)t

where (rowid >

@pagesize

* (@pageindex

-1) and rowid <=

@pagesize

* (@pageindex)) order

by id desc

--cte表示式 --

declare

@pagesize

int,@pageindex

intset

@pagesize

=20;set

@pageindex=2

; with t as(

select row_number() over(order

by byod_zzfp.id desc) as

rowid

,byod_zzfp.

*from byod_zzfp where1=

1)select

*from

twhere (rowid >

@pagesize

* (@pageindex

-1) and rowid <=

@pagesize

* (@pageindex)) order

by id desc

------ max/min ----------

create

proc

[dbo

].[usplgetsolutionlist

]@pagesize

int, --

頁碼大小

@pageindex

int, --

頁碼@strwhere

nvarchar(2000)='',

@totalrecordcount

int output --

總記錄數

asdeclare

@strsql

nvarchar(max) --

sql語句

declare

@sqlcount

int--

返回總記錄

declare

@strsqlcount

nvarchar(max) --

sql語句1,總記錄數語句

declare

@tempsql

nvarchar(max) --

查詢字段

declare

@temtableon

nvarchar(2000) --

表連線及表連線關係

declare

@order

nvarchar(500) --

排序set

@tempsql='

networkcutover.id

'set

@temtableon='

networkcutover networkcutover

inner join member member on networkcutover.dutymember = member.memberid '

set@strsql='

';set@order='

order by networkcutover.id desc

'if(@pageindex

<=1)

begin

set@strsql='

select top '+

str(@pagesize) +

@tempsql+'

from '+

@temtableon+'

where 1=1 '+

@strwhere

+@order;

endelse

begin

set@strsql='

select top '+

str(@pagesize)+

@tempsql+'

from '+

@temtableon+'

where networkcutover.id < (select min(t.id) from (select top '+

str(@pagesize

*(@pageindex

-1))+

'networkcutover.id from '+

@temtableon+'

where 1=1 '+

@strwhere

+@order+'

) t)'+

@strwhere

+@order

endprint

@strsql

set@strsqlcount='

select @sqlcount=count(*) from '+

@temtableon+'

where 1=1 '+

@strwhere

print

@strsqlcount

exec sp_executesql @strsqlcount,n'

@sqlcount int output

',@sqlcount

output

set@totalrecordcount

=@sqlcount

exec(@strsql)

go

view code

小技巧:

可增加乙個總記錄數作為輸入引數,查詢條件不變的情況,總記錄數不變(不再查詢總記錄數)。第一次查詢輸入引數為0需要查詢總記錄數。

分頁的兩種技巧

分頁的兩種技巧 分頁的技巧有兩種,一種是直接透過t sql,另一種是透過store procedure,在這post出來跟大家分享一下 t sql 假設northwind有乙個customer的table,你需要取回41 50筆的記錄,t sql語法該如何作呢?select top 10 custo...

兩種分頁SQL效率比較

資料庫版本 oracle9i r9.2.0.6 兩種方案 1.select from select a.rownum rn from select from table a where rn 20 and rn 10 2.select from select a.rownum rn from sel...

java分頁的兩種方式

方式其實都非常的簡單,一種是資料庫分頁用limit限制取出條數,一種是在業務邏輯裡面分頁,我用的是jdbc,所以每次游標指定到一定的條數進行展示。因為只是簡單的進行原理學習,所以並沒有對 方面對嚴格的書寫,明白原理就好。主要的地方就是在進行資料庫查詢的時候,假設有一張表flownode,sql語句如...