分頁儲存過程

2021-05-09 21:05:25 字數 3350 閱讀 2686

--

獲取指定頁的資料 

create

procedure

pagination

@tblname

varchar

(255

), --

表名 @strgetfields

varchar

(1000) =

'*', 

--需要返回的列 

@fldname

varchar

(255)=

'', 

--排序的欄位名 

@pagesize

int=

10, 

--頁尺寸 

@pageindex

int=1, 

--頁碼 

@docount

bit=0, 

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

@ordertype

bit=0, 

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

@strwhere

varchar

(1500) =

''--

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

asdeclare

@strsql

varchar

(5000

) --

主語句 

declare

@strtmp

varchar

(110

) --

臨時變數 

declare

@strorder

varchar

(400

) --

排序型別 

if@docount!=0

begin

if@strwhere

!=''

set@strsql="

select

count(*

) as

total 

from

[" + @tblname + "

]where"+

@strwhere

else

set@strsql="

select

count(*

) as

total 

from

[" + @tblname + "]" 

end--

以上**的意思是如果@docount傳遞過來的不是0,就執行總數統計。以下的所有**都是@docount為0的情況 

else

begin

if@ordertype!=0

begin

set@strtmp="

<

(select

min" 

set@strorder=" 

orderby[

" + @fldname +"

]desc

" --

如果@ordertype不是0,就執行降序,這句很重要! 

endelse

begin

set@strtmp="

>

(select

max" 

set@strorder=" 

orderby[

" + @fldname +"

]asc

" end

if@pageindex=1

begin

if@strwhere

!=''

set@strsql="

select

top" 

+str

(@pagesize) +

" "+

@strgetfields+" 

from

[" + @tblname + "

]where" +

@strwhere

+" " 

+@strorder

else

set@strsql="

select

top" 

+str

(@pagesize) +

" "+

@strgetfields+" 

from

["+ @tblname + "]"

+@strorder

--如果是第一頁就執行以上**,這樣會加快執行速度 

endelse

begin

--以下**賦予了@strsql以真正執行的sql** 

set@strsql="

select

top" 

+str

(@pagesize) +

" "+

@strgetfields+" 

from[" 

+ @tblname + "

]where

[" + @fldname + "]" 

+@strtmp+"(

["+ @fldname + "]) 

from

(select

top" 

+str

((@pageindex-1

)*@pagesize) +

" ["+ @fldname + "

]from

[" + @tblname + "]" 

+@strorder

+") 

astbltmp)"

+@strorder

if@strwhere

!=''

set@strsql="

select

top" 

+str

(@pagesize) +

" "+

@strgetfields+" 

from[" 

+ @tblname + "

]where

[" + @fldname + "]" 

+@strtmp+"(

[" + @fldname + "]) 

from

(select

top" 

+str

((@pageindex-1

)*@pagesize) +

" [" + @fldname + "

]from

[" + @tblname + "

]where" +

@strwhere

+" " 

+@strorder

+") 

astbltmp) 

and" 

+@strwhere

+" " 

+@strorder

endend

exec

(@strsql)go

分頁儲存過程 分頁儲存過程

分頁儲存過程 alter proc dbo p pageshow pagesize int,每頁大小 currentpage int out,當前頁 housename nvarchar 50 房產名稱 totalcount int out,總記錄數 totalpage int out 總頁數 as...

分頁儲存過程

create proc p sobigo percentpage tblname varchar 255 t category 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pag...

分頁儲存過程

create procedure pro select pageindex int,pagesize int as select student.sno,student.sname,student.s grade.math,grade.physics,grade.huaxue,grade.chine...