分享乙個分頁儲存過程和分頁函式

2022-02-25 10:10:40 字數 3311 閱讀 5254

分頁儲存過程

**create

procedure

[dbo].

[getrecordwithpage

]@fieldstype

nvarchar

(1000

),   

--欄位列表(帶型別),用於@t表變數的字段宣告,如:photoid int,userid int,phototitle nvarchar(50)

@fieldslist

nvarchar

(500

),    

--欄位列表(不帶型別),用於分頁部分讀取@t表變數的字段,也可使用*代替,但效能會下降,如:photoid ,userid ,phototitle

@selectsrting

nvarchar

(2000

), --

向@t表變數中讀取記錄的select語句

@resultorderby

nvarchar

(200

), --

對分頁結果進行排序的字段,如:公升序'photoid asc'、降序'photoid desc',注意:如果是降序的話要在selectsrting和此處都加desc

@pagesize

int,                

--頁尺寸,0表示返回所有行

@currentpage

int,             

--當前頁,首頁為1

@recordcount

intoutput       

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

asbegin

declare

@strsql

varchar

(4000

)declare

@sql

nvarchar

(1000

)set

@strsql='

declare @t table('+

@fieldstype+'

);'set@strsql

=@strsql+'

insert into @t '+

@selectsrting+'

;'set@sql

=@strsql+'

select @aa=count(*) from @t;

'exec

sp_executesql 

@sql,n'

@aa int output',

@recordcount

output;

if@pagesize=0

set@strsql

=@strsql+'

select '+

@fieldslist+'

from @t;

'else

if@currentpage=1

set@strsql

=@strsql+'

select top('+

str(

@pagesize)+

')'+

@fieldslist+'

from @t;

'else

begin

set@strsql

=@strsql+'

select top('+

str(

@pagesize)+

')'+

@fieldslist+'

from (select top('+

str(

@pagesize

*@currentpage)+

')'+

@fieldslist+'

, row_number() over (order by '+

@resultorderby+'

)'set@strsql

=@strsql+'

as rownumber from @t

'set

@strsql

=@strsql+'

) as r where r.rownumber >'+

str(

@pagesize*(

@currentpage-1

))+';

'end

exec

(@strsql

)end

分頁函式:

**create

function

[dbo].

[f_conformationpage

](  

@pagenum

int, 

--頁碼

@pagesize

int,

--頁面大小

@orderexpression

nvarchar(50

),--

排序表示式如:'id desc'

@oldsql

nvarchar

(max

) --

待分頁的sql語句

) returns

nvarchar

(max

)  --

待分頁sql語句

asbegin

declare

@newsql

nvarchar

(max

)  set

@newsql=''

declare

@beginpage

asnvarchar

(100

) --

開始數字

set@beginpage=(

@pagenum

*@pagesize)-

(@pagesize-1

)declare

@endpage

nvarchar

(100

)set

@endpage

=@beginpage

+@pagesize-1

set@newsql='

select * from (

select row_number( ) over( order by '+

@orderexpression+'

) as rownum,* from ('+

@oldsql+'

) as aa) as yy

where rownum between '+

@beginpage+'

and '+

@endpage+'

order by '+

@orderexpression

return

@newsql

end

乙個分頁儲存過程

page language c import namespace system.data import namespace system.data.sqlclient 訂單號 服務專案 預訂日期 操作人員 分配狀態 databinder.eval container.dataitem,offerid...

乙個分頁儲存過程

louje 分頁儲存過程 create procedure usp page pagesize int,頁大小 pageno int,頁號 tablename nvarchar 500 表名 keyword nvarchar 20 主鍵 fieldname nvarchar 2000 要顯示的欄位名...

乙個分頁儲存過程

create procedure sp page tb varchar 50 表名 col varchar 50 按該列來進行分頁 coltype int,col 列的型別,0 數字型別,1 字元型別,2 日期時間型別 orderby bit,排序,0 順序,1 倒序 collist varchar...