您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

一个基于ROW_NUMBER()的通用分页存储过程代码

2024/6/10 2:08:49发布21次查看
项目中有很多小型的表(数据量不大),都需要实现分页查询,因此实现了一个通用的分页。
建立好如下的存储过程,以后要分页,直接调用改存储过程就可以了。
注意:数据量大、性能要求高的,请个性化处理。
代码如下:
alter procedure [dbo].[common_procedure_selectwithpage]
@sql varchar(5000),
@currentpageno int,
@pagesize int,
@totalnum int output
as
set nocount on
declare @sqlcmd varchar(5000)
------------------------------------------ --查询数据
set @sqlcmd = 'select * from (' + @sql + ') a where rowindex between ' + convert(varchar,(@currentpageno-1) * @pagesize + 1) + ' and ' + convert(varchar,@currentpageno * @pagesize)
exec(@sqlcmd) print (@sqlcmd)
------------------------------------------ --求记录总数
if @totalnum = -1
begin
create table #temp1(num int)
insert into #temp1
exec('select count(*) from (' + @sql + ') a')
select @totalnum=(select * from #temp1)
drop table #temp1
end
用法很简单,但必须在传入的sql中使用row_number() over(...) as rowindex :
declare @sql varchar(5000)
declare @currentpageno int
declare @pagesize int
declare @totalnum int
set @currentpageno = 100
set @pagesize = 10
set @totalnum = -1
set @sql = ' select *, row_number() over (order by 排序字段) as rowindex from 表名 a with (nolock) '
exec [dbo].[common_procedure_selectwithpage] @sql,@currentpageno,@pagesize,@totalnum output
select @totalnum
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product