sqlserver 通用分页存储过程

复制代码 代码如下:

create proc commonpagination

@columns varchar(500), –要显示的列名,用逗号隔开

@tablename varchar(100), –要查询的表名

@ordercolumnname varchar(100), –排序的列名

@order varchar(50), –排序的方式,升序为asc,降序为 desc

@where varchar(100), –where 条件,如果不带查询条件,请用 1=1

@pageindex int, –当前页索引

@pagesize int, –页大小(每页显示的记录条数)

@pagecount int output –总页数,输出参数

as

begin

declare @sqlrecordcount nvarchar(1000) –得到总记录条数的语句

declare @sqlselect nvarchar(1000) –查询语句

set @sqlrecordcount=n’select @recordcount=count(*) from ‘

+@tablename + ‘ where ‘+ @where

declare @recordcount int –保存总记录条数的变量

exec sp_executesql @sqlrecordcount,n’@recordcount int output’,@recordcount output

–动态 sql 传参

if( @recordcount % @pagesize = 0) –如果总记录条数可以被页大小整除

set @pagecount = @recordcount / @pagesize –总页数就等于总记录条数除以页大小

else –如果总记录条数不能被页大小整除

set @pagecount = @recordcount / @pagesize + 1 –总页数就等于总记录条数除以页大小加1

set @sqlselect =

n’select ‘+@columns+’ from (

select row_number() over (order by ‘

+@ordercolumnname+’ ‘+@order

+’) as tempid,* from ‘

+@tablename+’ where ‘+ @where

+’) as temptablename where tempid between ‘

+str((@pageindex – 1)*@pagesize + 1 )

+’ and ‘+str( @pageindex * @pagesize)

exec (@sqlselect) –执行动态sql

end

go

–以下是调用示例

use pubs

go

declare @pagecount int

exec commonpagination

‘job_id,job_desc’,’jobs’,’job_id’,

‘asc’,’1=1′,2,2,@pagecount output

select ‘总页数为:’ + str(@pagecount)

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐