SqlServer 存储过程分页

适用于2005以上版本

create procedure [dbo].[SP_GetPageList]
(
@columns nvarchar(max),   --查询字段
@tablename nvarchar(max), --表名\视图
@orderby nvarchar(max),   --排序字段
@swhere nvarchar(max),     --查询条件
@pagesize int,             --每页条数
@pageindex int,            --页的索引
@rowCount int output       --总记录数
)
as 

--获取总记录数
declare @sqlcount Nvarchar(max)
set @sqlcount=N'select @rowCount=count(*) from '+@tablename+' '+@swhere
exec sp_executesql @sqlcount, N'@rowCount int out', @rowCount out


--计算页数
declare @pagecout int 
if @rowCount%@pagesize>0
set @pagecout=(@rowCount/@pagesize)+1
else
set @pagecout=(@rowCount/@pagesize)
 

--计算起始索引
declare @begin nvarchar(30)
declare @end nvarchar(30)

if @pageindex<1
set @pageindex=1

if @pageindex>@pagecout
set @pageindex=@pagecout
set @begin=convert(nvarchar(30), (@pagesize*(@pageindex-1))+1)
set @end=CONVERT(nvarchar(30), @pagesize*@pageindex)


--查询结果
declare @sqlre nvarchar(max)
declare @top int
set @top=@pageindex*@pagesize
set @sqlre=N'select top '+Cast(@top as varchar)+' ROW_NUMBER() over('+@orderby+') as rownum, '+@columns+' from '+@tablename+' '+@swhere

exec('select '+@columns+' from ('+@sqlre+') a where a.rownum between '+@begin+' and '+@end+' '+@orderby)

 

posted @ 2013-07-17 15:26  疯狂二十九笔  阅读(185)  评论(0编辑  收藏  举报