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
查看全文
相关阅读:
Java并发包concurrent——ConcurrentHashMap
Eclipse中给SVN添加项目
Maven在导入其他项目时报错:Plugin execution not covered by lifecycle configuration
新导入的项目目录结构不对(main目录)
java.lang.reflect.Method.getAnnotation()方法示例
彻底理解ThreadLocal
Oracle查询前几条数据的方法
PLSQL Developer新手使用教程(图文教程)
PLSQL连接本地oracle或远程oracle数据库,实现随意切换
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
原文地址:https://www.cnblogs.com/zsy/p/311231.html
最新文章
cocoaspod使用 引用头文件找不到
Could not find RubyGem cocoapods 错误
iOS buttonWithType:101 苹果私有api
iOS7 下使用SVPullToRefresh 下拉刷新导航栏位置错误
ARC下 does not support automated __weak references错误
wordpress 使用jquery需要主要的问题
去掉WordPress顶部工具条
Linux下文件打包与解包
Linux 文件/文件夹重命名
div的显示隐藏方法汇总
热门文章
Linux rm删除
ZingChart 图表插件
向php数组添加元素的方法哪种更高效
C# 字符串型转数字型
PHP过滤器 filter_has_var() 函数
WordPress添加前台注册功能
WordPress实现前台登录功能
WordPress登录框显示/隐藏输入的密码
Disqus 升级到3.0以上版本的评论同步问题
WPF ProgressBar 样式
Copyright © 2011-2022 走看看