sql分頁儲存過程

2021-04-20 12:01:15 字數 3751 閱讀 9772

今天要用到sql分頁儲存過程,從網上搜尋了多個比較一下,

/*分頁儲存過程

descript:分頁儲存過程

*/ create procedure database_pagelist(

@tblname nvarchar(200), ----要顯示的表或多個表的連線

@fldname nvarchar(200) = '*', ----要顯示的字段列表

@pagesize int, ----每頁顯示的記錄個數

@page int, ----要顯示那一頁的記錄

@pagecount int = 1 output, ----查詢結果分頁後的總頁數

@counts int = 1 output, ----查詢到的記錄數

@fldsort nvarchar(100) = null, ----排序字段列表或條件

@sort bit, ----排序方法,0為公升序,1為降序

@strcondition nvarchar(200), ----查詢條件,不需where

@id nvarchar(50) ----主表的主鍵

) as

set nocount on

declare @sqltmp nvarchar(1000) ----存放動態生成的sql語句

declare @strtmp nvarchar(1000) ----存放取得查詢結果總數的查詢語句

declare @strid nvarchar(1000) ----存放取得查詢開頭或結尾id的查詢語句

declare @sqlsort nvarchar(200) ----存放臨時生成的排序條件

declare @intcounts int ----要移動的記錄數

declare @beginid int ----開始的id

declare @endid int ----結束的id

--------首先生成排序方法---------

if @sort=0 --公升序

begin

if not(@fldsort is null)

set @sqlsort = ' order by ' + @fldsort

else

set @sqlsort = ' order by ' + @id

end

else --降序

begin

if not(@fldsort is null)

set @sqlsort = ' order by ' + @fldsort + ' desc'

else

set @sqlsort = ' order by ' + @id + ' desc '

end

--------生成查詢語句--------

--此處@strtmp為取得查詢結果數量的語句

if @strcondition is null --沒有設定顯示條件

begin

set @sqltmp = @fldname + ' from ' + @tblname

set @strtmp = 'select @counts=count(' + @id + ') from '+@tblname

set @strid = ' from ' + @tblname

end

else

begin

set @sqltmp = + @fldname + 'from ' + @tblname + ' where ' + @strcondition

/* set @sqltmp = + @fldname + 'from ' + @tblname */

set @strtmp = 'select @counts=count(' + @id + ') from '+@tblname + ' where ' + @strcondition

set @strid = ' from ' + @tblname + ' where ' + @strcondition

end

----取得查詢結果總數量-----

exec sp_executesql @strtmp,n'@counts int out ',@counts out

--取得分頁總數

if @counts <= @pagesize

set @pagecount = 1

else

set @pagecount = (@counts / @pagesize) + 1

--計算要移動的記錄數

if @page = 1

set @intcounts = @pagesize

else

begin

set @intcounts = (@page-1) * @pagesize + 1

end

-----取得分頁後此頁的第一條記錄的id

set @strid = 'select @beginid=' + @id + ' ' + @strid

set @intcounts = @intcounts - @pagesize + 1

set rowcount @intcounts

exec sp_executesql @strid,n'@beginid int out ',@beginid out

-----取得分頁後此頁的最後一條記錄的id

set @intcounts = @intcounts + @pagesize - 1

print @intcounts

set rowcount @intcounts

exec sp_executesql @strid,n'@beginid int out ',@endid out

------恢復系統設定-----

set rowcount 0

set nocount off

------返回查詢結果-----

if @strcondition is null

set @strtmp = 'select ' + @sqltmp + ' where ' + @id + ' between ' + str(@beginid) + ' and ' + str(@endid)

else

/* set @strtmp = 'select ' + @sqltmp + ' where ' + @id +' between ' + str(@beginid) + ' and ' + str(@endid) + ' and ' + @strcondition */

set @strtmp = 'select ' + @sqltmp + ' and ' + @id +' between ' + str(@beginid) + ' and ' + str(@endid)

/* set @strtmp = 'select ' + @sqltmp + ' and (' + @id +' between ' + str(@beginid) + ' and ' + str(@endid) + ') and ' + @strcondition */

/* set @strtmp = 'select * from tbproduct where (xid between 1 and 2) and xvisible = 1' */

if not(@sqlsort is null)

set @strtmp = @strtmp + @sqlsort

exec sp_executesql @strtmp

go

sql 儲存過程分頁

create proc myx prpagerecordset querystr nvarchar 1000 keyfield nvarchar 200 pagesize int,pagenumber int as begin declare sqltext as nvarchar 4000 dec...

SQL 儲存過程 分頁

1.俄羅斯儲存過程 的改良版 create procedure pagination1 pagesize int,頁面大小,如每頁儲存20條記錄 pageindex int 當前頁碼 as set nocount on begin declare indextable table id int id...

SQL 分頁儲存過程

create procedure splitpage sql nvarchar 4000 不帶排序語句的sql語句 page int,頁碼 recsperpage int,每頁容納的記錄數 id varchar 255 需要排序的不重複的id號 sort varchar 255 排序欄位及規則 as...