mysql毫秒级百万数据分页存储过程_毫秒级百万数据分页存储过程

/****** Object: StoredProcedure [dbo].[up_Page2005] Script Date: 11/28/2013 17:10:47 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROC [dbo].[up_Page2005]

(

@TableName VARCHAR(MAX) , --表名

@Fields VARCHAR(5000) = ''*'' , --字段名(全部字段为*)

@OrderField VARCHAR(5000) , --排序字段(必须!支持多字段)

@sqlWhere VARCHAR(5000) = NULL ,--条件语句(不用加where)

@pageSize INT , --每页多少条记录

@pageIndex INT = 1 --指定当前为第几页

)

AS

BEGIN

DECLARE @sql NVARCHAR(MAX);

DECLARE @totalRecord INT;

DECLARE @TotalPage INT;

--计算总记录数

IF ( @SqlWhere = ''''

OR @sqlWhere = NULL

)

SET @sql = ''select @totalRecord = count(*) from '' + @TableName

ELSE

SET @sql = ''select @totalRecord = count(*) from '' + @TableName

+ '' where 1=1 '' + @sqlWhere

EXEC sp_executesql @sql, N''@totalRecord int OUTPUT'',

@totalRecord OUTPUT--计算总记录数

--计算总页数

SELECT @TotalPage = CEILING(( @totalRecord + 0.0 ) / @PageSize)

IF ( @SqlWhere = ''''

OR @sqlWhere = NULL

)

SET @sql = ''Select top ('' + CONVERT(VARCHAR, @pageSize) + '') ''

+ @Fields + '' FROM (select ROW_NUMBER() Over(order by ''

+ @OrderField + '') as 编号,'' + @Fields + '' from '' + @TableName

ELSE

SET @sql = ''Select top ('' + CONVERT(VARCHAR, @pageSize) + '') ''

+ @Fields + '' FROM (select ROW_NUMBER() Over(order by ''

+ @OrderField + '') as 编号,'' + @Fields + '' from '' + @TableName

+ '' where 1=1 '' + @SqlWhere

--处理页数超出范围情况

IF @PageIndex <= 0

SET @pageIndex = 1

IF @pageIndex > @TotalPage

SET @pageIndex = @TotalPage

--处理开始点和结束点

DECLARE @StartRecord INT

DECLARE @EndRecord INT

SET @StartRecord = ( @pageIndex - 1 ) * @PageSize + 1

SET @EndRecord = @StartRecord + @pageSize - 1

--继续合成sql语句

SET @Sql = @Sql + '') as t where 编号>='' + CONVERT(VARCHAR, @StartRecord)

+ '' order by 编号''

EXEC(@Sql)

IF @@Error <> 0

RETURN -1

ELSE

SELECT @totalRecord ,

@TotalPage ---返回记录总数,返回总页数

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值