總結乙個分頁儲存過程 修訂版

2021-04-06 19:33:38 字數 4800 閱讀 7358

除錯儲存過程老是提示「invalid column name ...」,暈倒,檢查到最後發現是字串竟然寫成了"",哈哈,應該是 '',記住了。

在這裡整理了兩個可以用的分頁儲存過程,以備後用。

第一:alter

procedure

consignment

@tablename

varchar(80

) ,@strorder

varchar(50

) ,@pageindex

int=1,

@pagesize

int=15,

@strgetfields

varchar

(200) =

'*',

@output

intoutput

asbegin

declare

@strsql

varchar

(500

)declare

@sql

nvarchar

(1000

)declare

@rbigint

set@sql=n

'select @r=count(*) from  '+

@tablename

exec

sp_executesql  

@sql

,  n

'@r bigint output

', 

@routput

set@output=@r

if(

@pageindex=1

)begin

set@strsql='

select top '+

str(

@pagesize)+

''

+@strgetfields+'

from '+

@tablename+'

order by '+

@strorder

endelse

set@strsql='

select top '+

str(

@pagesize)+

''

+@strgetfields+'

from '+

@tablename+'

where ('+

@strorder+'

>= ( select max('+

@strorder+'

) from ( select top '+

str(

@pagesize

*@pageindex)+

'* from '+

@tablename+'

order by '+

@strorder+'

) as temptable)) order by '+

@strorder

select

@strsql

exec

(@strsql

)end

第二:

alter

procedure

allproce

@tablename

varchar

(200

) ,   

--表名

@strgetfields

varchar

(200) =

'*

',  

--查詢列名

@pageindex

int=

1,         

--頁碼

@pagesize

int=

15,         

--頁面大小

@strwhere

varchar

(100) =

'',     

--查詢條件

@strorder

varchar

(100) =

'', 

--排序列名

@intorder

bit=

0,        

--排序型別  1為公升序

@countall

bigint

output              

--返回紀錄總數用於計算頁面數    

asbegin

declare

@strsql

varchar

(500

)  --

主語句declare

@strtemp

varchar

(100

) --

臨時變數

declare

@strorders

varchar(50

) --

排序語句

declare

@table

varchar(70

)declare

@sql

nvarchar

(1000

)declare

@rbigint

set@sql=n

'select @r=count(*) from  '+

convert

(nvarchar

(200

),@tablename

)exec

sp_executesql   

@sql

,  n

'@r bigint output

',  

@routput

set@countall=@r

if@intorder=0

begin

--為0是公升序

set@strtemp='

>(select max

'set

@strorders='

order by  '+

@strorder+'

asc 

'end

else

begin

--否則為降序

set@strtemp='

<(select min

'set

@strorders='

order by  '+

@strorder+'

desc 

'end

if@pageindex=1

--第一頁直接讀出紀錄

begin

if@strwhere=''

begin

set@strsql='

select top '+

str(

@pagesize)+

''

+@strgetfields+'

from '+

@tablename+'

'+

@strorders

endelse

begin

set@strsql='

select top '+

str(

@pagesize)+

''

+@strgetfields+'

from '+

@tablename+'

where '+

@strwhere+'

'+

@strorders

endend

else

begin

set@strsql='

select top'+

str(

@pagesize)+

''

+@strgetfields+'

from '+

@tablename+'

where '+

@strorder+'

'+

@strtemp+'

('

+@strorder+'

)'+'

from (select top '+

str((

@pageindex-1

)*

@pagesize)+

''

+@strgetfields+'

from '+

@tablename+'

'+

@strorders+'

) as temptable ) '+

@strorders

if@strwhere!='

'begin

set@strsql='

select top '+

str(

@pagesize)+

''

+@strgetfields+'

from '+

@tablename+'

where '+

@strorder+'

'+

@strtemp+'

('

+@strorder+'

) '+'

from(select top '+

str((

@pageindex-1

)*

@pagesize)+

''

+@strgetfields+'

from '+

@tablename+'

where '+

@strwhere+'

'+

@strorders+'

) as temptable) where '+

@strwhere+'

'+

@strorders

endend

exec

(@strsql

)    

endgo

乙個分頁儲存過程

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...