[MSSQL]mssql海量高效分页存储过程
2012-02-16 12:29
363 查看
CREATE PROCEDURE [dbo].[PROC_GetListRecordByPage] @tblName VARCHAR(255), -- 表名 @fldName VARCHAR(255), -- 主键字段名 @PageSize INT = 10,-- 页尺寸 @PageIndex INT = 1, -- 页码 @IsReCount INT = 0, -- 0 返回记录总数; 1只返回数据; 2 都返回 @OrderType BIT = 0, -- 设置排序类型, 非 0 值则降序 @strWhere VARCHAR(3000) = '', -- 查询条件 (注意: 不要加 where) @returnFld VARCHAR(1000) = '*' --需要返回的列 AS BEGIN DECLARE @tempSql VARCHAR(6000) -- 临时语句 DECLARE @strSqlAll VARCHAR(6000) -- 主语句 DECLARE @strSqlCnt VARCHAR(400) -- 数据数量 DECLARe @OrderTypeStr NVARCHAR(20) IF @OrderType != 0 or @OrderType is null SET @OrderTypeStr = 'DESC' ELSE SET @OrderTypeStr = 'ASC' SET @tempSql = 'SELECT ROW_NUMBER() OVER (ORDER BY [' + @fldName + '] ' + @OrderTypeStr + ') AS rowId,' + @returnFld + ' FROM [' + @tblName + '] ' IF @strWhere != '' SET @tempSql = @tempSql + ' WHERE ' + @strWhere SET @strSqlAll = 'SELECT * FROM (' + @tempSql + ') t WHERE rowId BETWEEN ' + CAST(((@PageIndex - 1) * @PageSize + 1) AS VARCHAR) + ' AND ' + CAST((@PageIndex * @PageSize ) AS VARCHAR); --PRINT @strSqlAll EXEC (@strSqlAll) IF @IsReCount != 1 IF @strWhere != '' SET @strSqlCnt = 'SELECT COUNT(1) AS Total FROM [' + @tblName + '] WHERE ' + @strWhere ELSE SET @strSqlCnt = 'SELECT COUNT(1) AS Total FROM [' + @tblName + ']' EXEC (@strSqlCnt) END 或者 CREATE PROCEDURE [dbo].[PROC_GetListByPage_Sql2000] @tblName varchar(255), -- 表名 @fldName varchar(255), -- 排序字段名 随机为newid() @PageSize int = 10, -- 页尺寸 @PageIndex int = 1, -- 页码 @IsReCount int = 0, -- 0 返回记录总数; 1只返回数据; 2 都返回 @OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 @strWhere varchar(3000) = '', -- 查询条件 (注意: 不要加 where) @returnFld varchar(1000) = '*' --需要返回的列 AS declare @strSQL varchar(6000) -- 主语句 declare @strSQL1 varchar(6000) -- 主语句 declare @strTmp varchar(2000) -- 临时变量 declare @strOrder varchar(400) -- 排序类型 if @OrderType != 0 begin set @strTmp = '<(select min' set @strOrder = ' order by ' + @fldName +' desc' end else begin set @strTmp = '>(select max' set @strOrder = ' order by ' + @fldName +' asc' end set @strSQL = 'select top ' + str(@PageSize) + @returnFld + ' from [' + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)' + @strOrder if @strWhere != '' set @strSQL = 'select top ' + str(@PageSize) + @returnFld + ' from [' + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder if @PageIndex = 1 begin set @strTmp ='' if @strWhere != '' set @strTmp = ' where ' + @strWhere set @strSQL = 'select top ' + str(@PageSize) + @returnFld + ' from [' + @tblName + ']' + @strTmp + ' ' + @strOrder end --print @strSQL exec (@strSQL) if @IsReCount != 1 if @strWhere != '' set @strSQL1 = 'select count(*) as Total from [' + @tblName + ']'+' where ' + @strWhere else set @strSQL1 = 'select count(*) as Total from [' + @tblName + ']' exec (@strSQL1)
相关文章推荐
- [MSSQL]mssql海量高效分页存储过程
- mssql 高效的分页存储过程分享
- 高效,海量,分页存储过程
- mssql 高效的分页存储过程分享
- mssql高效的分页存储过程
- AspNetPager与MSSQL海量分页存储过程结合
- 专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)--zt
- oracle高效分页存储过程(百万数据级)
- 一个高效的数据分页的存储过程 可以轻松应付百万数据
- 通用高效分页存储过程代码
- 海量存储过程(500w数据,分页只需2秒)
- mssql分页存储过程
- ORACLE高效分页存储过程代码
- 一个高效的数据分页的存储过程 可以轻松应付百万数据
- 一个高效分页存储过程
- 一个高效的数据分页的存储过程 可以轻松应付百万数据
- 通用高效分页存储过程代码
- 通用高效分页存储过程代码
- 通用高效分页存储过程代码