zoukankan
html css js c++ java
数据库分页存储过程(2)
/**/
/*
******************************************************************************************
过程名称:Common_OrderUpend_Pagination
过程功能:排序反转分页法实现的分页存储过程
代码设计:小朱(zsy619@163.com)
设计时间:2005-11-3 13:58:26
******************************************************************************************
功能描述:
******************************************************************************************
如果您修改了我的程序,请留下修改记录,以便对程序进行维护,谢谢 !!!
==========================================================================================
修改人 修改时间 修改原因
------------------------------------------------------------------------------------------
==========================================================================================
******************************************************************************************
备注:
在这个采用排序反转分页法实现的分页存储过程中,
①若当前为第一页,则直接取出记录;②若当前页码大于总页码,则返回空结构;
③若当前页码的2倍小于或等于总页码,
则先按排序规则截取前n[n=当前页码*每页条数]条记录形成视图1,
接着截取视图1中的后m[m=每页条数]条形成视图2(实际操作是反转排序规则,取前m条),
最后再次反转排序规则(负负得正,用默认排序规则就可以了)截取视图2中的前m[m=每页条数]条形成视图3,
视图3中的记录就是我们想要的结果;
④若当前当前页码的2倍大于总页码,
则按排序规则截取后n[n=总记录-(当前页码-1)*每页条数]条记录形成视图1(实际操作是反转排序规则,取前n条),
然后按默认排序规则截取视图1中的前m[m=每页条数]条形成视图2
视图2中的记录就是我们想要的结果。
*****************************************************************************************
*/
CREATE
Procedure
[
dbo
]
.
[
Common_OrderUpend_Pagination
]
@PageCurr
int
=
1
,
--
当前页码
@PageSize
int
=
10
,
--
每页条数
@QueryString
varchar
(
5000
),
--
查询字符串
@OrderString
varchar
(
5000
),
--
排序规则
@FieldShow
varchar
(
5000
),
--
要显示的字段
@RecordCount
int
output
--
总记录条数
AS
Declare
@intResult
Int
Begin
Tran
--
---------------------------------------------------------------代码设计--------------------------------------------------------------------
declare
@ViewName
varchar
(
100
)
--
临时查询视图名称
set
@ViewName
=
'
tempView
'
declare
@RecordQuery
varchar
(
5000
)
--
记录查询
declare
@OrderUpend
varchar
(
5000
)
--
排序规则反转
if
(
@FieldShow
=
''
or
@FieldShow
=
null
)
set
@FieldShow
=
'
*
'
if
(
@PageCurr
=
0
or
@PageCurr
=
null
)
set
@PageCurr
=
1
if
(
@PageSize
=
0
or
@PageSize
=
null
)
set
@PageSize
=
10
if
(
@OrderString
=
''
or
@OrderString
=
null
)
begin
print
(
'
Err:必须设置排序规则--
'
)
return
end
--
反转排序规则开始--
if
(
charindex
(
'
,
'
,
@OrderString
)
=
0
)
begin
if
(
charindex
(
'
desc
'
,
@OrderString
)
=
0
)
set
@OrderUpend
=
replace
(
@OrderString
,
'
asc
'
,
''
)
+
'
desc
'
else
set
@OrderUpend
=
replace
(
@OrderString
,
'
desc
'
,
''
)
end
else
begin
set
@OrderUpend
=
''
declare
@strSingle
varchar
(
100
)
declare
@strTemp
varchar
(
1000
)
declare
@strSpace
varchar
(
10
)
set
@strSpace
=
''
set
@strTemp
=
@OrderString
while
@strTemp
<>
''
begin
if
(
charindex
(
'
,
'
,
@strTemp
)
=
0
)
begin
set
@strSingle
=
@strTemp
set
@strTemp
=
''
end
else
begin
set
@strSingle
=
substring
(
@strTemp
,
1
,
charindex
(
'
,
'
,
@strTemp
)
-
1
)
set
@strTemp
=
substring
(
@strTemp
,
charindex
(
'
,
'
,
@strTemp
)
+
1
,
8000
)
end
if
(
charindex
(
'
desc
'
,
@strSingle
)
=
0
)
set
@strSingle
=
replace
(
@strSingle
,
'
asc
'
,
''
)
+
'
desc
'
else
set
@strSingle
=
replace
(
@strSingle
,
'
desc
'
,
''
)
print
(
@strSingle
)
set
@OrderUpend
=
@OrderUpend
+
@strSpace
+
@strSingle
set
@strSpace
=
'
,
'
end
end
--
反转排序规则结束--
--
print('排序规则:'+@OrderString)
--
print('反 转 后:'+@OrderUpend)
--
统计记录数开始--
create
table
#tempTBcount(myCount
int
)
exec
(
'
insert into #tempTBcount select count(0) from (
'
+
@QueryString
+
'
)
'
+
@ViewName
+
''
)
select
@RecordCount
=
mycount
from
#tempTBcount
drop
table
#tempTBcount
--
统计记录数结束--
declare
@PageCount
int
--
总页数
declare
@PassRecordCount
int
--
预先取出的记录数
if
(
@RecordCount
%
@PageSize
=
0
)
set
@PageCount
=
@RecordCount
/
@PageSize
else
set
@PageCount
=
(
@RecordCount
-
@RecordCount
%
@PageSize
)
/
@PageSize
+
1
if
(
@PageCurr
=
1
)
begin
set
@RecordQuery
=
'
select top
'
+
CONVERT
(
nvarchar
,
@PageSize
)
+
'
'
+
@FieldShow
+
'
from (
'
+
@QueryString
+
'
)
'
+
@ViewName
+
'
_1 order by
'
+
@OrderString
--
print('只是显示第一页数据')
--
print('实际执行的查询为:'+@RecordQuery)
exec
(
@RecordQuery
)
end
else
if
(
@PageCurr
>
@PageCount
)
begin
set
@RecordQuery
=
'
select top 0
'
+
@FieldShow
+
'
from(
'
+
@QueryString
+
'
)
'
+
@ViewName
--
print('总记录显示不了这么多页')
--
print('实际执行的查询为:'+@RecordQuery)
exec
(
@RecordQuery
)
return
@@rowcount
end
else
if
(
@PageCurr
*
2
<=
@PageCount
)
begin
set
@PassRecordCount
=
@PageCurr
*
@PageSize
set
@RecordQuery
=
'
select top
'
+
CONVERT
(
nvarchar
,
@PageSize
)
+
'
'
+
@FieldShow
+
'
from (
'
+
'
select top
'
+
CONVERT
(
nvarchar
,
@PageSize
)
+
'
* from (
'
+
'
select top
'
+
CONVERT
(
nvarchar
,
@PassRecordCount
)
+
'
* from (
'
+
@QueryString
+
'
)
'
+
@ViewName
+
'
_1 order by
'
+
@OrderString
+
'
)
'
+
@ViewName
+
'
_2 order by
'
+
@OrderUpend
+
'
)
'
+
@ViewName
+
'
_3 order by
'
+
@OrderString
--
print('头部截取')
--
print('实际执行的查询为:'+@RecordQuery)
exec
(
@RecordQuery
)
return
@@rowcount
end
else
begin
set
@PassRecordCount
=
@RecordCount
-
(
@PageCurr
-
1
)
*
@PageSize
set
@RecordQuery
=
'
select top
'
+
CONVERT
(
nvarchar
,
@PageSize
)
+
'
'
+
@FieldShow
+
'
from (
'
+
'
select top
'
+
CONVERT
(
nvarchar
,
@PassRecordCount
)
+
'
* from (
'
+
@QueryString
+
'
)
'
+
@ViewName
+
'
_1 order by
'
+
@OrderUpend
+
'
)
'
+
@ViewName
+
'
_2 order by
'
+
@OrderString
--
print('尾部截取')
--
print('实际执行的查询为:'+@RecordQuery)
exec
(
@RecordQuery
)
return
@@rowcount
end
--
print @RecordQuery
Set
@intResult
=
@@ROWCOUNT
--
--------------------------------------------------------------------------------------------------------------------------------------------------
If
@@Error
<>
0
Begin
RollBack
Tran
Return
-
1
End
Else
Begin
Commit
Tran
Return
@intResult
End
GO
查看全文
相关阅读:
Graphic
GUI编程实战
Swing 混合布局
运算符与数据库函数
mysq基础操作
mysql常见问题处理
static 与final abstract关键字
JAVA面试
Swing
AWT的应用
原文地址:https://www.cnblogs.com/zsy/p/311231.html
最新文章
20180517 容器 迭代器
20180517 迭代器
20180517 程序运行速度
20180516-2
20180516
20180521 数组转换
20180521 数组时间复杂度
20180521 数组
20180514 ++i和i++
20180514 存储地址
热门文章
HTML 标签
XHTML文档基本结构
一:Html基本结构
web 分类 和使用Dreamweaver
算法 JavaScript
java spring
red and black tree
编译原理
OS
PageRank算法
Copyright © 2011-2022 走看看