微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通用sqlserver分页存储过程

通用sqlserver分页存储过程

来自: http://www.cnblogs.com/nzperfect/archive/2007/05/08/738999.html

单主键:

CREATE   PROC  P_viewPage


    
/**/ /*

        nzperfect [no_mIss] 高效通用分页存储过程(双向检索) 2007.5.7  QQ:34813284

        敬告:适用于单一主键或存在唯一值列的表或视图

        ps:sql语句为8000字节,调用时请注意传入参数及sql总长度不要超过指定范围

           

    
*/


    
@TableName VARCHAR ( 200 ),      -- 表名

     @FieldList 2000 显示列名,如果是全部字段则为* @PrimaryKey 100 单一主键或唯一值键 @Where 查询条件 不含'where'字符,如id>10 and len(userid)>9 @Order 1000 排序 不含'order by'字符,如id asc,userid desc,必须指定asc或desc                                                                    注意当@SortType=3时生效,记住一定要在最后加上主键,否则会让你比较郁闷 @SortType INT ,                排序规则 1:正序asc 2:倒序desc 3:多列排序方法 @RecorderCount 记录总数 0:会返回总记录 @PageSize 每页输出的记录数 @PageIndex 当前页数 @TotalCount  OUTPUT,       记返回总记录 @TotalPageCount  OUTPUT    返回总页数 AS

    
SET  NOCOUNT  ON IF   ISNULL ( '' =   0 RTRIM ( LTRIM ))

    
REPLACE )),0)">' ' )


    
WHILE CHARINDEX > OR  ,255)">BEGIN

        
)

        
)    

    
END  

        

        
< 1 > 3            

    
 

        
PRINT ERR_00 )       

        
RETURN     


    
 ( UPPER RIGHT 4 )) !=  ASC AND 5  DESC ERR_02 DECLARE @new_where1 )

    
@new_where2 @new_order1 )   

    
@new_order2 @new_order3 @sql 8000 @sqlCount NVARCHAR 4000 @where

            
 WHERE   ELSE  WHERE  +  

            
 AND  @order 2  

                
 ORDER BY 

                
   ' @PrimaryKey + )             

            
ASC,0)">{ASC},0)">DESC,0)">{DESC},0)">)            

            
)

            
SUBSTRING LEN - <> *             

                    
)                              

                    
                    

                    

                    

                        
@FieldList  

                        
 

                            
))                        

                        
 

                        
+ ))

                    
))                     

                
            

        
SELECT @TotalCount=COUNT(*),@TotalPageCount=CEILING((COUNT(*)+0.0)/

                    
CAST ) FROM 

    

    

             
EXEC  SP_EXECUTEsql  @TotalCount INT OUTPUT,@TotalPageCount INT OUTPUT

                               
 OUTPUT

        
SELECT CEILING (( @TotalCount 0.0 / >= 返回第一页数据                  SELECT TOP  STR  FROM   

                               
)   返回最后一页数据  FROM ( ABS @PageSize * @PageIndex - )) 

                               

                               
 ) AS TMP                      

                
        

        
    

    
   仅主键正序排序 <= / 正向检索                         

                            
 

                                       
 > 

                                       
(SELECT MAX( ) FROM (SELECT TOP  ))   ) AS TMP)  反向检索  <  (SELECT MIN( 仅主键反序排序 ) AS TMP)                                 

                        
 

                    
  

                
                         

            
多列排序,必须包含主键,且放置最后,否则不处理  FROM (   SELECT TOP      

                        
  

                                       
)

GO

联合主键的:
 P_public_ViewPage

     /**/

        no_mIss 通用分页存储过程 2007.3.1  QQ:34813284

        适用于联合主键/单主键/存在能确定唯一行列/存在能确定唯一行的多列 (用英文,隔开)

        调用

            第一页查询时返回总记录和总页数及第一页记录:

            EXECUTE P_public_ViewPage_per 'TableName','col1,col2,col3,col4','pk1,pk2,pk3',

                'col5>0 and col7<9','pk1 asc,pk2 asc,pk3 asc',10,1,

                @TotalCount OUTPUT,@TotalPageCount OUTPUT

            其它页调用,比如第89页(假设第一页查询时返回总记录为2000000):

            EXECUTE P_public_ViewPage_per 'TableName',2000000,89,@TotalPageCount OUTPUT

    
显示列名 单一主键或唯一值键或联合主键列表(用英文,隔开)或能确定唯一行的多列列表(用英文,隔开) 查询条件 不含'where'字符 排序 不含'order by'字符,用英文,隔开   返回记录总数 A.* A.         

        

 

    
@new_where3 @new_where4 @Fields



    
 WHERE 1=1   

                    
 AND A.  

            
LEFT ))

            
 = B. B.  IS NULL AND   ),

                            
 ))  A   

                       
 A  A LEFT JOIN (SELECT TOP  )) 

                       

                       
 )B ON 


GO

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐