SQL Server的通用分页存储过程 未使用游标,速度更快! |
本文标签:分页,存储过程 正常情况下,SQL Server服务器上会对使用频率大的Table建立合适的索引 复制代码 代码如下: [code] --// ============================ --// SQL Server通用分页存储过程 --// Author : netwild --// date : 2010/07/22 --// Email : netwild@163.com --// QQ : 52100641(网无忌) --// ============================ SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO CREATE PROC execByPage @sqlQuery varchar(2000), --//输入参数:SQL检索语句或表名 @pageSize int, --//输入参数:每页显示记录条数 @pageIndex int --//输入参数:当前页码 AS SET NOCOUNT ON SET ANSI_WARNINGS OFF declare @tmpTableName varchar(50) set @tmpTableName = ##TB1516_ + replace(cast(newid() as varchar(40)),-,) --//生成随机临时表名称 declare @subIndex int set @subIndex = charindex(from,@sqlQuery) if (@subIndex > 0) begin --//带FROM的标准检索语句 declare @sqlQuery1 varchar(2000) declare @sqlQuery2 varchar(2000) set @sqlQuery1 = substring(@sqlQuery,1,@subIndex - 1) set @sqlQuery2 = substring(@sqlQuery,@subIndex,len(@sqlQuery)) set @sqlQuery = @sqlQuery1 + ,IDENTITY(numeric,1,1) as ID1516 into + @tmpTableName + + @sqlQuery2 end else --//不带FROM的表名 begin set @sqlQuery = select *,IDENTITY(numeric,1,1) as ID1516 into + @tmpTableName + from + @sqlQuery end exec(@sqlQuery) --//建立并初始化临时表数据 declare @indexStart varchar(20),@indexEnd varchar(20) set @indexStart = cast((@pageIndex-1)*@pageSize+1 as varchar(20)) --//数据起始行ID set @indexEnd = cast(@pageIndex * @pageSize as varchar(20)) --//数据结束行ID exec(select * from + @tmpTableName + where ID1516 between + @indexStart + and + @indexEnd) --//检索该页数据 exec(select max(ID1516) as recordCount from + @tmpTableName) --//提取总条数 exec(drop table + @tmpTableName) --//删除临时表 GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO [/code] |