分页是我们开发过程中最常用到的功能,实现方式多种多样,根据项目开发中的体验,还是用存储过程分页比较不错,不管在性能上,还是方便性上都是个不错的选择。下面是用存储过程实现分页的一个思路,把源代码贴出来和大家分享。

转载或修改请注明出处,很辛苦弄出来的,哈哈^_^ 

分页用存储过程实现USE [tempdb]
分页用存储过程实现
GO
create by        :    
分页用存储过程实现
分页用存储过程实现create at        :    2007-02-10 
分页用存储过程实现
分页用存储过程实现modify    by        :   
分页用存储过程实现
分页用存储过程实现modify at        :   
分页用存储过程实现
分页用存储过程实现remark            :   
分页用存储过程实现  
分页用存储过程实现case            :    
分页用存储过程实现
分页用存储过程实现copyright        :    http://blog.csdn.net/lxjhb
分页用存储过程实现
分页用存储过程实现********************************************
分页用存储过程实现
*/
 
分页用存储过程实现
分页用存储过程实现
CREATE PROCEDURE [dbo].[PROC_COMM_PAGE_NAVIGATION]
分页用存储过程实现    
@TABLE_NAME VARCHAR(8000),        --table name or view     
分页用存储过程实现
    @PK_NAME VARCHAR(50),            --prime key column name      
分页用存储过程实现
    @SORT_COLUMN_NAME VARCHAR(50),    --sort column      
分页用存储过程实现
    @SORT_TYPE VARCHAR(10),            --sort type:asc,desc      
分页用存储过程实现
    @CURRENT_PAGE INT,                --current page       
分页用存储过程实现
    @PAGE_SIZE INT                    --page size      
分页用存储过程实现
AS      
分页用存储过程实现    
分页用存储过程实现
SET NOCOUNT ON    
分页用存储过程实现
BEGIN    
分页用存储过程实现    
DECLARE @LONGSQL  VARCHAR(8000)    
分页用存储过程实现          , 
@SHORTSQL NVARCHAR(4000)    
分页用存储过程实现          , 
@TAB VARCHAR(40)    
分页用存储过程实现          , 
@RECORD_COUNT INT    
分页用存储过程实现        
分页用存储过程实现    
SELECT @TAB = 'PRT_' + REPLACE(REPLACE(CONVERT(VARCHAR,GETDATE(),13),':','') ,' ','')     
分页用存储过程实现                  
+ '_' + CONVERT(VARCHAR,@@SPID)    
分页用存储过程实现        
分页用存储过程实现    
SELECT @LONGSQL =    
分页用存储过程实现        
'SELECT IDENTITY(INT,1,1) T1RNUM, T.* ' +    
分页用存储过程实现           
' INTO TEMPDB.DBO.'+ @TAB +    
分页用存储过程实现        
'  FROM ( ' + @TABLE_NAME + ' ) T' +    
分页用存储过程实现           
'  ORDER BY T.'+@SORT_COLUMN_NAME+' ' +     
分页用存储过程实现           
CASE WHEN @SORT_TYPE <> 'DESC' THEN 'ASC'    
分页用存储过程实现                
ELSE @SORT_TYPE END    
分页用存储过程实现        
分页用存储过程实现    
EXEC(@LONGSQL)      
分页用存储过程实现        
分页用存储过程实现    
SELECT @RECORD_COUNT =@@ROWCOUNT     
分页用存储过程实现        
分页用存储过程实现    
SELECT @SHORTSQL = 'SELECT ' +    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 2  THEN '  ' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 3  THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 4  THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 5  THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 6  THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 7  THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 8  THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 9  THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 10 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 11 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 12 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 13 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 14 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 15 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 16 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 17 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 18 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 19 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 20 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 21 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 22 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 23 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 24 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 25 THEN '' + C.NAME ELSE '' END+    
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 26 THEN '' + C.NAME ELSE '' END+  
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 27 THEN '' + C.NAME ELSE '' END+  
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 28 THEN '' + C.NAME ELSE '' END+  
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 29 THEN '' + C.NAME ELSE '' END+  
分页用存储过程实现           
MAX(CASE WHEN COLUMN_ID = 30 THEN '' + C.NAME ELSE '' END+  
分页用存储过程实现           
'  FROM TEMPDB.DBO.'+ @TAB +    
分页用存储过程实现        
' WHERE T1RNUM >  ' +     
分页用存储过程实现           
CONVERT(VARCHAR,    
分页用存储过程实现           (
CASE WHEN @CURRENT_PAGE <= 0 THEN 1    
分页用存储过程实现                 
WHEN @CURRENT_PAGE >=
分页用存储过程实现                      
CEILING(CONVERT(DECIMAL(15,2),@RECORD_COUNT)/@PAGE_SIZE)
分页用存储过程实现                 
THEN CEILING(CONVERT(DECIMAL(15,2),@RECORD_COUNT)/@PAGE_SIZE)
分页用存储过程实现                 
ELSE @CURRENT_PAGE    
分页用存储过程实现            
END-1* @PAGE_SIZE+    
分页用存储过程实现        
'   AND T1RNUM <= ' +     
分页用存储过程实现           
CONVERT(VARCHAR,    
分页用存储过程实现           
CASE WHEN @CURRENT_PAGE <= 0 THEN 1    
分页用存储过程实现                
WHEN @CURRENT_PAGE >= 
分页用存储过程实现                     
CEILING(CONVERT(DECIMAL(15,2),@RECORD_COUNT)/@PAGE_SIZE)
分页用存储过程实现                
THEN CEILING(CONVERT(DECIMAL(15,2),@RECORD_COUNT)/@PAGE_SIZE)
分页用存储过程实现                
ELSE @CURRENT_PAGE    
分页用存储过程实现            
END * @PAGE_SIZE)    
分页用存储过程实现      
FROM TEMPDB.SYS.OBJECTS O    
分页用存储过程实现      , TEMPDB.SYS.COLUMNS C    
分页用存储过程实现     
WHERE O.TYPE = 'U'    
分页用存储过程实现       
AND O.OBJECT_ID = C.OBJECT_ID    
分页用存储过程实现       
AND O.NAME = @TAB    
分页用存储过程实现
分页用存储过程实现    
--return result      
分页用存储过程实现
    SELECT @RECORD_COUNT AS 'RECORD_COUNT',      
分页用存储过程实现           
CEILING(CONVERT(DECIMAL(15,2),@RECORD_COUNT)/@PAGE_SIZEAS 'PAGE_COUNT',      
分页用存储过程实现           
CASE WHEN @CURRENT_PAGE <= 0 THEN 1    
分页用存储过程实现                
WHEN @CURRENT_PAGE >= 
分页用存储过程实现                     
CEILING(CONVERT(DECIMAL(15,2),@RECORD_COUNT)/@PAGE_SIZE)
分页用存储过程实现                
THEN CEILING(CONVERT(DECIMAL(15,2),@RECORD_COUNT)/@PAGE_SIZE)
分页用存储过程实现                
ELSE @CURRENT_PAGE    
分页用存储过程实现            
END AS 'CURRENT_PAGE',      
分页用存储过程实现           
@PAGE_SIZE    AS 'PAGE_SIZE',      
分页用存储过程实现           
@CURRENT_PAGE AS 'PAGE_IN'      
分页用存储过程实现        
分页用存储过程实现    
EXEC DBO.SP_EXECUTESQL @SHORTSQL    
分页用存储过程实现
分页用存储过程实现    
--drop temp table  
分页用存储过程实现
    SELECT @SHORTSQL = 'DROP TABLE TEMPDB.DBO.' + @TAB    
分页用存储过程实现    
EXEC DBO.SP_EXECUTESQL @SHORTSQL 
分页用存储过程实现
分页用存储过程实现
END
分页用存储过程实现
分页用存储过程实现
SET NOCOUNT OFF
分页用存储过程实现
分页用存储过程实现
分页用存储过程实现
分页用存储过程实现

 

相关文章: