分頁儲存過程支援多表聯合

2021-04-18 09:39:46 字數 3531 閱讀 1802

create

procedure

sp_paging

@tblname

varchar

(255

) , 

--表名

@strgetfields

varchar

(1000) =

'*', 

--需要返回的列 

@fldname

varchar

(255)=

'', 

--排序的欄位名

@pagesize

int=

10, 

--頁尺寸

@pageindex

int=1, 

--頁碼

@recordcount

int=

0output, 

--返回記錄總數

@pagecount

int=

0output, 

--分頁總數

@ordertype

int=0, 

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

@strwhere

varchar

(1500) =

''--

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

asdeclare

@strsql

nvarchar

(3000

) --

主語句declare

@strtmp

varchar

(110

) --

臨時變數

declare

@strorder

varchar

(400

) --

排序型別

begin

if@strwhere

!=''

set@strsql='

select @recordcount = count(*) from '+

@tblname+'

where '+

@strwhere

else

set@strsql='

select @recordcount = count(*) from '+

@tblname

endexec

sp_executesql 

@strsql,n'

@recordcount int out ',

@recordcount

out     

if@recordcount

%@pagesize=0

set@pagecount

=@recordcount

/@pagesize

else

set@pagecount

=@recordcount

/@pagesize+1

--以上**的意思是計算出記錄是總數和求出總共的頁數

begin

if@ordertype!=0

begin

set@strtmp='

<(select min

'set

@strorder='

order by '+

@fldname+'

desc'--

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

endelse

begin

set@strtmp='

>(select max

'set

@strorder='

order by '+

@fldname+'

asc'

endif

@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

if@strwhere

!=''

set@strsql='

select top '+

str(

@pagesize) +

''+@strgetfields+'

from '+

@tblname+'

where '+

@fldname+''

+@strtmp+'

('+substring

(@fldname

, charindex('

.',@fldname)+

1, len(

@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) +

''+@strgetfields+'

from '+

@tblname+'

where '+

@fldname+''

+@strtmp+'

('+substring

(@fldname

, charindex('

.',@fldname)+

1, len(

@fldname

)) +

') from (select top '+

str((

@pageindex-1

)*@pagesize) +

''+@fldname+'

from '+

@tblname+''

+@strorder+'

) as tbltmp)'+

@strorder

endend

--print

@strsql

exec

sp_executesql 

@strsql

go

MySql 多表聯合查詢分頁儲存過程

分享乙個好用的mysql多表聯合按條件查詢查詢分頁排序儲存過程 procedure structure for ppage drop procedure if exists ppage delimiter create definer root localhost procedure ppage i...

高效多表分頁儲存過程,可支援多表查詢,任意排序

create procedure usp paginglarge tablenames varchar 200 表名,可以是多個表,但不能用別名 primarykey varchar 100 主鍵,可以為空,但 order為空時該值不能為空 fields varchar 4000 要取出的字段,可以...

多表查詢分頁儲存過程

set ansi nulls on set quoted identifier on go 支援多表查詢分頁儲存過程 事理改進 2012.3 多表聯查1 declare count int exec proc datapagination sl article a,sl user u u.realn...