好记性不如烂笔头,生活、学习、工作、感悟,记于“笔下”,留于心间。任时光荏苒、世易时移,唯文字不改、记忆不散。

by:蚂蹄儿

SQL Server分页存储过程

分类:学无止境 - SQL Server

关键词: SQL Server  分页  存储过程 

来源:蚂蹄儿(www.motyer.cn)

阅读:129发布时间:

  在日常开发中,会经常遇到使用分页的情况,比如:新闻资讯分页、用户列表分页等。对于Easy UI中datagrid等无刷新分页插件来说,一般需要根据page(当前页面)、rows(每页的数据条数)两个参数来得到total(数据总条数)、list(当页数据集)两个结果。基于此分析,初步实现下面的存储过程。

CREATE proc [dbo].[procPageSelect]
@table nvarchar(max),      -- 输入参数,表名
@columns nvarchar(max),    -- 输入参数,要返回的列
@rows int,                 -- 输入参数,每页显示的数据量
@page int,                 -- 输入参数,当前页面
@orderBy nvarchar(max),    -- 输入参数,数据按什么字段排序,后面加上desc表示倒序
@condition nvarchar(max),  -- 输入参数,sql形式的筛选查询条件
@total int output          -- 输出参数,满足上诉查询条件的数据总数
as 
begin 
	declare @start int         -- 变量,获取的当页数据的起始位置
	declare @end int           -- 变量,获取的当页数据的结束位置
	declare @sql nvarchar(max) -- 变量,保存动态生成的sql语句
	if @condition = '' or @condition is NULL
	begin
		set @condition = '1=1'
	end
	set @sql = 'select @count = COUNT(*) from ' + @table + ' where ' + @condition
	exec sp_executesql @sql, N'@count int output', @total output
	--print(@total)
	set @start = @rows * (@page - 1)
	set @end = @rows * @page
	set @sql = 'with tmp as (select ROW_NUMBER() over(order by ' + @orderBy + ') as [no], ' + @columns + 
				' from (select * from ' + @table + ' where ' + @condition + ') as a) select * from tmp where [no] > ' + 
				LTRIM(Str(@start)) + ' and [no] <= ' + LTRIM(Str(@end))
	--print(@sql)
	exec(@sql)
end

  使用此存储过程,可以迅速、方便、精准、细粒度地对数据进行分页处理。


  桌面软件定制、中小型网站建设、移动APP开发请添加QQ/微信:773347113。

上一篇:

下一篇: