文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>一个基于ROW_NUMBER()的通用分页存储过程

一个基于ROW_NUMBER()的通用分页存储过程

时间:2010-10-22  来源:蒋志雄

建立好如下的存储过程,以后要分页,直接调用改存储过程就可以了。

注意:数据量大、性能要求高的,请个性化处理。

ALTER PROCEDURE [dbo].[COMMON_PROCEDURE_SelectWithPage]   

@Sql VARCHAR(5000),   

@CurrentPageNo  INT,   

@PageSize INT,   

@TotalNum INT OUTPUT  

AS   

SET NOCOUNT ON     

DECLARE @SqlCmd VARCHAR(5000)     

------------------------------------------   --查询数据   

SET @SqlCmd = 'SELECT * FROM (' + @Sql + ') A WHERE RowIndex BETWEEN ' +    CONVERT(VARCHAR,(@CurrentPageNo-1) * @PageSize + 1) + ' AND ' +    CONVERT(VARCHAR,@CurrentPageNo * @PageSize)    

EXEC(@SqlCmd)  PRINT (@SqlCmd)     

------------------------------------------   --求记录总数   

IF @TotalNum = -1   

BEGIN    

CREATE TABLE #Temp1(num INT)      

INSERT INTO #Temp1 

EXEC('SELECT count(*) FROM (' + @Sql + ') A')    

SELECT @TotalNum=(SELECT * FROM #Temp1)      

DROP TABLE #Temp1     

END  

 

用法很简单,但必须在传入的SQL中使用ROW_NUMBER() OVER(...) AS RowIndex :

DECLARE @Sql VARCHAR(5000)  

DECLARE @CurrentPageNo INT  

DECLARE @PageSize INT  

DECLARE @TotalNum INT  

 

SET @CurrentPageNo = 100  

SET @PageSize = 10  

SET @TotalNum = -1  

SET @Sql = '   SELECT  *,    ROW_NUMBER() OVER (ORDER BY 排序字段) AS RowIndex   FROM 表名  A WITH (NOLOCK) '   

 

EXEC [dbo].[COMMON_PROCEDURE_SelectWithPage] @Sql,@CurrentPageNo,@PageSize,@TotalNum OUTPUT  

 

SELECT @TotalNum 

相关阅读 更多 +
排行榜 更多 +
三角符文第一章下载

三角符文第一章下载

角色扮演 下载
闪客快打3无敌版下载

闪客快打3无敌版下载

飞行射击 下载
嘀嘀动画官方正版下载

嘀嘀动画官方正版下载

趣味娱乐 下载