T SQL分頁功能儲存過程

2022-03-31 02:04:09 字數 3293 閱讀 2333

分頁功能儲存過程

alter

procedure

[dbo

].[p_splitpagesquery

]@tablesname

nvarchar(max),--

表名或檢視名(只能傳單一表名)

@pknvarchar(max)=

'',--

主鍵(可以為空!)

@strsort

nvarchar(max)=

'',--

排序字段(按照這個欄位對查詢結果進行排序),不能為空

@sorttype

int=

0,--

排序方式,預設為0(公升序),1為降序

@strwhere

nvarchar(max)=

'',--

查詢條件(即sql語句中的where後面部分)

@fields

nvarchar(max)='*

',--

讀取字段(呈現出來的字段)

@pagecurrent

int=

1,--

當前頁碼,預設為1

@pagesize

int=

10,--

頁面大小,預設為10

@pagecount

int output,--

總頁數(按照頁面大小一共分了多少頁)

@recordcount

int output--

查詢結果的總條數

as/*

返回值說明:查詢結果(表)

*/declare

@sqlstr

nvarchar(4000)if

@strwhere

isnot

null

and@strwhere

!=''

begin

set@strwhere='

where '+

@strwhere+'

'end

else

begin

set@strwhere=''

endbegin

if@strsort=''

if@pk

isnot

null

and@pk

!=''

set@strsort

=@pk

if@pagecurrent

<

1set

@pagecurrent=1

if@sorttype=1

and@strsort

!=''

set@strsort

=@strsort+'

desc 'if

@sorttype=0

and@strsort

!=''

set@strsort

=@strsort+'

asc 'if

@pagecurrent=1

--第一頁提高效能

begin

set@sqlstr='

select top '+

str(@pagesize) +''

+@fields+'

from '+

@tablesname+'

as tb '+

@strwhere

if@strsort

!=''

set@sqlstr

=@sqlstr+'

order by '+

@strsort

endelse

begin

declare

@startpos

nvarchar(50

)

declare

@endpos

nvarchar(50

)

set@startpos

=convert(nvarchar(50),(@pagecurrent

-1) *

@pagesize+1

)

set@endpos

=convert(nvarchar(50),@pagecurrent

*@pagesize

)

set@sqlstr='

select '+

@fields+'

from (select row_number() over(order by '+

@strsort+'

) as rownum , tb.* '+

'from '+

@tablesname+'

as tb '+

@strwhere+'

) as d

where rownum between '+

@startpos+'

and '+

@endpos

if@strsort

!=''

set@sqlstr

=@sqlstr+'

order by '+

@strsort

endend

print

@sqlstr

exec(@sqlstr

)declare

@sqlcount

nvarchar(4000

)set

@sqlcount='

select @recordcount=count(*),@pagecount=ceiling((count(*)+0.0)/'+

cast(@pagesize

asvarchar)+

') from '+

@tablesname

+@strwhere

--輸出引數賦值

exec sp_executesql @sqlcount,n'

@recordcount int output,@pagecount int output',

@recordcount output,@pagecount output

呼叫示例

exec@x=

[dbo

].[p_splitpagesquery]'

表或檢視

','',@sorderby,@nordertpye,@ssqlstring,'*'

,

@npagenum,@npagesize,@pagecount output,@recordcount output

T SQL 儲存過程

1 允許模組化程式設計 2 執行速度快 3 減少網路流通量 4 提高系統安全性 儲存過程分為 系統儲存過程和使用者自定義儲存過程 系統儲存過程 由系統定義,存放在master資料庫中以sp 或者xp 開頭 儲存過程的分為帶引數和不帶引數 帶引數的儲存過程 有 輸入引數和輸出引數,輸出引數在定義時除了...

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

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

T SQL 程式設計 儲存過程

t sql程式設計 1.變數 全域性變數 變 量含 義 error 最後乙個t sql錯誤的錯誤號 identity 最後一次插入的識別符號 language 當前使用的語言名稱 max connections 可以建立的同時連線的最大數目 rowcount 受上乙個sql語句影響的行數 serve...