SQL server 分頁方法小結

2021-09-08 10:08:04 字數 3982 閱讀 7757

這裡面介紹一下常用的分頁方法:

1.使用top來分頁

sql**

select

top@pagesize * 

from

table

where

id not

in(select

top@pagesize*(@pageindex-1) id 

from

table

)   

2.使用 row_number()over 

sql**

select

* from

(select

row_number() over (

order

byt.欄位名 

desc)as

row, t.*  

from

表名 t  

where

條件 ) tt 

where

tt.row 

between

起始位置  

and結束位置;  

stringbuilder strsql = new stringbuilder();  

);  

);  

if (!string.isnullorwhitespace(orderby.trim()))  

else

);  

if (!string.isnullorwhitespace(strwhere.trim()))  

);  

, startindex, endindex);  

3.使用分頁儲存過程

sql**

if exists (

select

* from

dbo.sysobjects 

where

id = object_id(n

'[dbo].[sys_page_v2]'

) and

objectproperty(id, n

'isprocedure'

) = 1)  

drop

procedure

[dbo].[sys_page_v2]  

go  

create

procedure

[dbo].[sys_page_v2]  

@pcount int

output

,    

--總頁數輸出

@rcount int

output

,    

--總記錄數輸出

@sys_table nvarchar(100),    --查詢表名

@sys_key varchar

(50),        

--主鍵

@sys_fields nvarchar(500),    --查詢字段

@sys_where nvarchar(3000),    --查詢條件

@sys_order nvarchar(100),    --排序字段

@sys_begin int

,        

--開始位置

@sys_pageindex int

,        

--當前頁數

@sys_pagesize int

--頁大小

asset

nocount 

onset

ansi_warnings 

onif @sys_pagesize 

@sys_pageindex 

begin

return

enddeclare

@new_where1 nvarchar(3000)  

declare

@new_order1 nvarchar(100)  

declare

@new_order2 nvarchar(100)  

declare

@sql nvarchar(4000)  

declare

@sqlcount nvarchar(4000)  

declare

@top

intif(@sys_begin <=0)  

set@sys_begin=0  

else

set@sys_begin=@sys_begin-1  

if isnull

(@sys_where,

'') = 

''set

@new_where1 = 

' 'else

set@new_where1 = 

' where '

+ @sys_where   

if isnull

(@sys_order,

'') <> 

''begin

set@new_order1 = 

' order by '

+ replace

(@sys_order,

'desc',''

)  set

@new_order1 = 

replace

(@new_order1,

'asc'

,'desc'

)  set

@new_order2 = 

' order by '

+ @sys_order  

endelse

begin

set@new_order1 = 

' order by id desc'

set@new_order2 = 

' order by id asc'

endset

@sqlcount = 

'select @rcount=count(1),@pcount=ceiling((count(1)+0.0)/'

+ cast

(@sys_pagesize 

asnvarchar)+

') from '

+ @sys_table + @new_where1  

exec

sp_executesql @sqlcount,n

'@rcount int output,@pcount int output'

,  @rcount output

,@pcount 

output

if @sys_pageindex > ceiling((@rcount+0.0)/@sys_pagesize)    --如果輸入的當前頁數大於實際總頁數,則把實際總頁數賦值給當前頁數

begin

set@sys_pageindex =  ceiling((@rcount+0.0)/@sys_pagesize)  

endset

@sql = 

'select '

+ @sys_fields +

' from '

+ @sys_table + 

' w1 '

+ ' where '

+ @sys_key +

' in ('

+'select top '

+ ltrim(str(@sys_pagesize)) +

' '+ @sys_key + 

' from '

+'('

+'select top '

+ ltrim(str(@sys_pagesize * @sys_pageindex + @sys_begin)) + 

' '+ @sys_key + 

' from '

+ @sys_table + @new_where1 + @new_order2   

+') w '

+ @new_order1  

+') '

+ @new_order2  

print(@sql)  

exec

(@sql)  

go  

sql server 實現分頁方法

var ipage getpage 獲取當前頁 var ipagesize 20 每頁的記錄數量 var sql select top ipagesize id,user from users where age 18 and id not in select top ipagesize ipage...

SqlServer 經常使用分頁方法總結

以下演示樣例總結了,sqlserver資料庫 經常使用分頁方法,僅供學習參考 使用 rownumber 和 between and 組合分頁 create proc proc fuzzysearchandpaging pageindex int,頁索引 pagesize int,頁大小 search...

sqlserver三種分頁查詢方法

假設有表student,每頁顯示10條記錄,查詢第5頁的內容。from student where idnotin 40是這麼計算出來的 10 5 1 select top 40 idfrom student order byid order by id原理 需要拿出資料庫的第5頁,就是40 50條...