毫秒级百万数据分页存储过程(mssql)
2013-11-28 17:17
176 查看
/****** 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
View Code
相关文章推荐
- [MSSQL]2分处理数据分页存储过程
- Jquery Easyui插件Datagrid获取后台mssql数据通过存储过程高效分页来获取
- 毫秒级百万数据分页存储过程
- 毫秒级百万数据分页存储过程
- 发布一个通用的数据分页的存储过程
- 实现小数据量和海量数据的通用分页显示存储过程
- sql 优化之:实现小数据量和海量数据的通用分页显示存储过程(系列四)
- 实现小数据量和海量数据的通用分页显示存储过程
- c#中调用存储过程返回表的分页数据及总记录个数
- MSSQL将表数据生成SQL脚本的存储过程
- 毫秒级百万数据分页存储过程[欢迎转载]
- 再上数据分页控件(不用存储过程)
- 最通用的ibatis.Net使用sql server存储过程返回分页数据的详细例子
- 大量数据分页存储过程
- 实现小数据量和海量数据的通用分页显示存储过程
- 毫秒级百万数据分页存储过程[欢迎转载]
- 一个将数据分页的存储过程
- 千万级数据量mssql分页查询优化和算法
- [转]小量数据和海量数据分页显示存储过程
- 实现小数据量和海量数据的通用分页显示存储过程