分頁Sql語句

2021-09-08 10:31:31 字數 4036 閱讀 7380

第一種 top剔除法。去除top (pageindex-1)*pagesize

select

top10

*from

dbo.sbd_exchange_bill

where eb_id not

in (select

top (10

*1) eb_id from dbo.sbd_exchange_bill order

by eb_id)

第二種 max剔除法 。去除 小於  max(pageindex-1)*pagesize

select

top10

*from

dbo.sbd_exchange_bill

where eb_id >(select

max(eb_id)

from (select

top (10

*2) eb_id from dbo.sbd_exchange_bill order

by eb_id) as t )

第三種方法 游標法(來自網路)

create

procedure

pgo_getrecordfrompage

@tblname

varchar(255), --

表名@fldname

varchar(255), --

欄位名@pagesize

int=

10, --

頁尺寸@pageindex

int=

1, --

頁碼@iscount

bit=

0, --

返回記錄總數, 非 0 值則返回

@ordertype

bit=

0, --

設定排序型別, 非 0 值則降序

@strwhere

varchar(1000) =

''--

查詢條件 (注意: 不要加 where)

asdeclare

@strsql

varchar(6000) --

主語句declare

@strtmp

varchar(500) --

臨時變數

declare

@strorder

varchar(400) --

排序型別

if@iscount!=0

--假如是查詢記錄總數,直接應用count(0)函式

begin

if@strwhere

!=''

set@strsql='

select count(*) as total from ['+

@tblname+'

] where '+

@strwhere

else

set@strsql='

select count(*) as total from ['+

@tblname+'

] 'end--

假如是想查詢記載,則

else

begin

if@pageindex=1

--如果是第一頁

begin

set@strtmp=''

if@strwhere

!=''

set@strtmp='

where '+

@strwhere

set@strsql='

select top '+

str(@pagesize) +

'* from ['+

@tblname+'

]'+@strtmp+'

'+@strorder

endelse

--如果不是第一頁

begin

--假如是降序查詢……

if@ordertype!=0

begin

set@strtmp='

'set

@strorder='

order by ['+

@fldname+'

] desc

'end

--如果是公升序查詢……

else

begin

set@strtmp='

>(select max

'set

@strorder='

order by ['+

@fldname+'

] asc

'end

if@strwhere

!=''

set@strsql='

select top '+

str(@pagesize) +

'* from ['+

@tblname+'

] where ['+

@fldname+'

]'+@strtmp+'

(['+@fldname+'

]) from (select top '+

str((@pageindex

-1)*

@pagesize) +'[

'+@fldname+'

] from ['+

@tblname+'

] where '+

@strwhere+'

'+@strorder+'

) as tbltmp) and '+

@strwhere+'

'+@strorder

else

set@strsql='

select top '+

str(@pagesize) +

'* from ['+

@tblname+'

] where ['+

@fldname+'

]'+@strtmp+'

(['+@fldname+'

]) from (select top '+

str((@pageindex

-1)*

@pagesize) +'[

'+@fldname+'

] from ['+

@tblname+'

]'+@strorder+'

) as tbltmp)'+

@strorder

endend

exec (@strsql

)go

儲存過程

執行儲存過程

use[

student]go

declare

@return_value

int--

宣告返回值變數

exec

@return_value=[

dbo].[

pgo_getrecordfrompage]--

返回值等於儲存過程返回結果

@tblname

= n'

t_stuinfo

', --

指定表名

@fldname

= n'

stuid

', --

指定排序的字段

@pagesize

=4, --

分頁大小

@pageindex

=2, --

頁碼@iscount

=0, --

是否返回記錄總數,當指定1時返回滿足strwhere條件的記錄總數

@ordertype

=0, --

排序型別0公升1降序

@strwhere

=" " --

where條件,不用寫where

select

'return value'=

@return_value

go

執行儲存過程

Sql 分頁語句

with temptb as select row number over order by id as rowid,from pagecut select from temptb where rowid between 2 50 and 2 50 50 這是乙個資料分頁方法,從sql2005起就支...

SQL分頁語句

這個分頁方法 sql分頁語句 本人對原作者的方案二做了小小的改動 原語句 select top 頁大小 from table1 where id select isnull max id 0 from select top 頁大小 頁數 1 id from table1 order by id a ...

SQL分頁語句

有關分頁 sql 的資料很多,有的使用儲存過程,有的使用游標。本人不喜歡使用游標,我覺得它耗資 效率低 使用儲存過程是個不錯的選擇,因為儲存過程是經過預編譯的,執行效率高,也更靈活。先看看單條 sql 語句的分頁 sql 吧。方法1 適用於 sql server 2000 2005 select t...