博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
整理了一个Sql sever 2005下通用的分页储存过程
阅读量:6757 次
发布时间:2019-06-26

本文共 1814 字,大约阅读时间需要 6 分钟。

 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

你可能感兴趣的文章
5月8日团队博客
查看>>
Course
查看>>
【养生窍门】记住!!!运动后千万别做这9件事
查看>>
Django实现组合搜索的方法示例
查看>>
Oracle ITL(Interested Transaction List)理解
查看>>
Android源码学习之观察者模式应用
查看>>
mysql中排序
查看>>
第一类对象-> 函数名 -> 变量名
查看>>
关于使用out.println出现乱码的问题
查看>>
将图片做成提交按钮
查看>>
MIPS program a block of C
查看>>
第六章 类型和成员基础
查看>>
WIN7切换用户
查看>>
接口测试(五)--Http headers
查看>>
1175:除以13
查看>>
DataSet转换为Byte[]方法
查看>>
Centos文件查看命令字符
查看>>
DSP c6678的启动方式
查看>>
遮罩层点击空白退出代码
查看>>
[HNOI2012]集合选数 BZOJ2734
查看>>