1.分页存储过程
CREATE procedure pagination
@str_sql varchar(1000) = '*', -- 执行的SQL 不含Order by 内容 @str_orderfield varchar(255)='''', -- 排序的字段名 @page_size int = 10, -- 页大小 @page_index int = 0, -- 页码 @order_type int, -- 设置排序类型, 非 -1 值则降序 @total_count int output -- 返回记录总数, 非 0 值则返回 as
----------------------- 获取指定页的数据-----------------------
declare @strsql varchar(5000) -- 主语句declare @strtmp varchar(5000) -- 临时变量declare @strorder varchar(400) -- 排序字串declare @cruRow int -- 当前行号
--执行总数统计exec getRowCount @str_sql,@total_count output
set @strtmp = ' select * from ' + ' (select top ' + convert(varchar(10),@page_size) + ' * from ' + ' (select top ' + convert(varchar(10),(@page_index + 1) * @page_size) +' * from '+ -- N+1页 ' ('+ @str_sql +') Src '
--排序方向if @order_type !=0 begin set @strsql= @strtmp + ' order by @str_orderfield asc) a ' + ' order by @str_orderfield desc)b' + ' order by @str_orderfield asc' endelse begin set @strsql= @strtmp + ' order by @str_orderfield desc) a ' + ' order by @str_orderfieldasc)b' + ' order by @str_orderfield desc' end
exec (@strsql)GO
----------------------------------------------------------------------------
2.分页存储过程执行中用到的行数统计
create procedure getRowCount @sql nvarchar(2000), @count int outputasbegin
---------------------- 获取数据总行数 ----------------------
declare @tmpsql nvarchar(2000) set @tmpsql='select @count=count(*) from ('+ @sql +') a'
execute sp_executesql @tmpsql,N'@count int output',@count output end
GO