高效的SQL分页存储过程

CREATE PROCEDURE  SP_CommonPageList
    @Fields VARCHAR(500),      
    @From VARCHAR(1000),      
    @Condition VARCHAR(1000),      
    @SortBy VARCHAR(500),      
    @PageIndex NVARCHAR(10),      
    @PageSize NVARCHAR(10),      
    @TotalCount INT OUT      
AS       
 DECLARE @SQL NVARCHAR(2000)      
 SET @SQL ='SELECT @TotalCount=COUNT(1) '+@From+'  '+@Condition+' '    
 EXEC SP_EXECUTESQL @SQL,N'@TotalCount INT OUTPUT', @TotalCount OUTPUT    
 DECLARE @ExeSQL NVARCHAR(4000)
 DECLARE @Count NVARCHAR(10)
 DECLARE @LastRow NVARCHAR(10)
 SET @Count=CONVERT(INT,@PageSize)*CONVERT(INT,@PageIndex)  
 SET @LastRow=@TotalCount
 PRINT @LastRow
 SET @ExeSQL='WITH TempList AS
	(SELECT TOP('+@LastRow+') ROW_NUMBER()OVER('+@SortBy+')AS Rows ,'+@Fields+' '+@From+' '+@Condition+')
	 SELECT TOP ('+@PageSize+') * FROM TempList WHERE Rows>='+@Count+''
--PRINT @ExeSQL   
EXEC sp_sqlexec @ExeSQL  

 

posted @ 2013-08-21 17:46  骑猪上高速_D  阅读(529)  评论(0编辑  收藏  举报