对SQL Server中任意select语句,如何才能分页呢?下面将为您建立一个通用的存储过程,对SQL Server中任意select语句进行分页,供您参考。
CREATE PROCEDURE [dbo].[usp_ResultWithPage]
@fields_Type varchar(1000), –字段列表(带类型),用于@t表变量的字段声明,如:PhotoID int,UserID int,PhotoTitle nvarchar(50)
@fieldsInT varchar(500), –字段列表(不带类型),用于分页部分读取@t表变量的字段,也可使用*代替,但性能会下降,如:PhotoID ,UserID ,PhotoTitle
@selectSrting varchar(2000), –向@t表变量中读取记录的Select语句,如:SELECT PhotoID ,UserID ,PhotoTitle FROM Photo_Basic
@result_OrderBy varchar(200), –对分页结果进行排序的字段,如:升序’PhotoID ASC’、降序’PhotoID DESC’
@pageSize int, –页尺寸,0表示返回所有行
@currentPage int, –当前页,首页为1
@IsReCount bit — 非0值则返回记录总数
AS
BEGIN
—————得到表变量@t————————-
DECLARE @strSql varchar(2000)
SET @strSql = ‘DECLARE @t TABLE(‘ + @fields_Type + ‘);’
SET @strSql = @strSql + ‘INSERT INTO @t ‘ + @selectSrting + ‘;’
–显示表变量的内容
–SET @strSql = @strSql + ‘SELECT ‘ + @fieldsInT + ‘ FROM @t;’
———-进行分页————————————
IF @pageSize = 0
SET @strSql = @strSql + ‘SELECT ‘ + @fieldsInT + ‘ FROM @t ;’
ELSE
IF @currentPage = 1
SET @strSql = @strSql + ‘SELECT TOP( ‘ + Str(@pageSize) + ‘) ‘ + @fieldsInT + ‘ FROM @t ;’
ELSE
BEGIN
SET @strSql = @strSql + ‘SELECT TOP( ‘ + Str(@pageSize) + ‘) * FROM ( SELECT TOP(‘ + Str(@pageSize * @currentPage) + ‘) *, ROW_NUMBER() OVER (ORDER BY ‘ + @result_OrderBy + ‘)’
SET @strSql = @strSql + ‘ AS RowNumber FROM @t’
SET @strSql = @strSql + ‘ ) AS r WHERE r.RowNumber > ‘ + Str(@pageSize * (@currentPage – 1)) + ‘;’
END
IF @IsReCount != 0
SET @strSql = ‘SELECT COUNT(1) AS Total FROM @t ;’
–RETURN @strSql
EXEC(@strSql)
———————–
END
总结一下,主要思想还是用了sql server 的 top row_number函数。
【编辑推荐】
使用SQL中SELECT语句的使用条件逻辑
SQL语句中SELECT语句的执行顺序
SQL语句中的嵌套SELECT语句
教您如何使用sql语句删除所有存储过程
SQL非正常删除日志文件的恢复方法讲解
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/296474.html<

