MSSQL分页:查询前几页速度最快的ROW_NUMBER() OVER分页存贮过程

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
CREATE PROCEDURE [ dbo ] . [ getPagerROWOVER ]
@PageIndex int = 1 ,
@PageSize int = 10 ,
@Tables nvarchar ( 1000 ) = NULL ,
@Fields nvarchar ( 2000 ) = ' * ' ,
@Where nvarchar ( 2000 ) = NULL ,
@GroupBy nvarchar ( 2000 ) = NULL ,
@OrderBy nvarchar ( 1000 ) = NULL ,
@ReturnCount int = 0 OUTPUT
AS
BEGIN
SET NOCOUNT ON ;
declare @Sql nvarchar ( 4000 ), @startRowIndex int , @maximumRows int ;
declare @strWhere nvarchar ( 2000 )
declare @strGroupBy nvarchar ( 2000 )

set @startRowIndex = ( @PageIndex - 1 ) * @PageSize ;
set @maximumRows = @PageSize ;

IF @Where IS NOT NULL AND @Where != ''
BEGIN
SET @strWhere = ' WHERE ' + @Where
END
ELSE
BEGIN
SET @strWhere = ''
END
IF @GroupBy IS NOT NULL AND @GroupBy != ''
BEGIN
SET @strGroupBy = ' GROUP BY ' + @GroupBy
END
ELSE
BEGIN
SET @strGroupBy = ''
END

set @Sql = ' select ' + @Fields + ' from (select ' + @Fields + ' , ROW_NUMBER() OVER (ORDER BY ' + @OrderBy + ' ) as rownum from ' + @Tables + @strWhere + @strGroupBy + ' ) as tmpTable where rownum > ' + CONVERT ( nvarchar ( 10 ), @startRowIndex ) + ' and rownum <= ( ' + CONVERT ( nvarchar ( 10 ), @startRowIndex ) + ' + ' + CONVERT ( nvarchar ( 10 ), @maximumRows ) + ' ) '
exec ( @Sql )
print @sql
set @Sql = ' select @ReturnCount=COUNT(*) from ' + @Tables + @strWhere
exec sp_executesql @Sql ,N ' @ReturnCount int OUTPUT ' , @ReturnCount OUTPUT
print @sql
END

 

转载于:https://www.cnblogs.com/livexy/archive/2010/07/06/1771936.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值