整理了一个Sql sever 2005下通用的分页储存过程

 1  --  CTE 分页
 2  --  支持多表级联 , 指定字段输出 , 多表多字段复杂排序与过滤
 3  --  原理是把 每条记录加上了分页的页码,然后按页面去读取
 4  --  按照@StrConditions筛选和@StrOrder排序 使用ROW_NUMBER()得出 rowid 
 5  --  rowid / PageSize = 当前记录的所在页码 , 加入当前记录
 6 
 7  CREATE   PROCEDURE   [ dbo ] . [ sp_CTE ] (    
 8       @TableName   varchar ( 500 ) ,     -- TableName
 9       @TableFeilds   varchar ( 2000 = '  *  ' ,     -- TableFeilds default * 
10       @PageSize   int  ,         -- PageSize
11       @PageIndex   int   ,     -- PageIndex 
12       @OrderColumName   varchar ( 1000 =   null ,       -- Order  default null
13       @IsAsc   bit   =   1   ,     --  ASC : 1 / DESC : 0 , if OderColumName(prior) is empty then order by @PK @IsAsc
14       @PK   varchar ( 100 ) ,         --  PK 
15       @Conditions   varchar ( 1000 =   null      -- where default null
16  )
17  AS
18       SET  NOCOUNT  ON ;
19 
20       declare   @StrSql   nvarchar ( 4000 )  
21       declare   @StrOrder   nvarchar ( 1000 )
22       declare   @StrCte   nvarchar ( 3000 )
23       declare   @StrConditions   nvarchar ( 1000 )
24     
25      --  Oder by 
26      if ( @OrderColumName   is   null   or   @OrderColumName   =   '' )
27          begin  
28               --  PK ASC/DESC
29               if   @IsAsc   =   1
30                   set   @StrOrder   =   '  order by  '   +   @PK   +   '  asc '
31               else
32                   set   @StrOrder   =   '  order by  '   +   @PK   +   '  desc '         
33           end
34      else
35           set   @StrOrder   =   '  order by  '   +   @OrderColumName
36      
37       --  Where
38       if  ( @Conditions   is   Not   null   And   @Conditions   <> '' )
39           set   @StrConditions = '  where  '   +   @Conditions
40       else
41           set   @StrConditions = ''
42 
43       --  CTE
44       set   @StrCte   = ' with Table_CET
45      as
46      (
47          select 
48              CEILING(
49                      (ROW_NUMBER() OVER ( '   +   @StrOrder   +   ' ))/ '   +   str ( @PageSize +   '
50                     ) as page_num,  ' +   @TableFeilds + '  
51          from  '   +   @TableName   +   @StrConditions   +    '  
52      )
53       ' ;
54 
55       set   @StrSql   =   @StrCte   +   ' select * from Table_CET where page_num =  '   +   str ( @PageIndex ) ;
56      
57       --  debug
58       print   @StrSql  
59 
60       --  exec sql
61       begin
62       exec  sp_executesql  @StrSql ;
63       end
64 

转载于:https://www.cnblogs.com/DanielChow/archive/2009/05/11/CET_Split.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值