- ·上一篇文章:asp操作json字符串的方法与举例
- ·下一篇文章:asp利用Weekday函数计算项目的结束时间
sql存储过程----分页显示表中的记录
通常在显示表中的记录的时候,由于记录很多,需要对记录进行分页显示,这里是利用sql存储过程进行分页显示
1、数据库和字段,conn.asp见
http://www.aspprogram.cn/detail.asp?id=35
请在表中添加几条记录
2、存储过程代码
 
 
 
 
CREATE 
PROCEDURE 
dbo.getUserList
 
 
 
 
 
 
 
@iPageCount 
int 
OUTPUT, 
 
 
--总页数
 
 
 
 
 
 
 
@iPage 
int, 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--当前页号
 
 
 
 
 
 
 
@iPageSize 
int 
 
 
 
 
 
 
 
 
 
 
 
--每页记录数
 
 
 
 
as
 
 
 
 
set 
nocount 
on
 
 
 
 
begin
 
 
 
 
 
 
 
--创建临时表 
 
 
 
 
 
 
 
create 
table 
#t 
(ID 
int 
IDENTITY, 
 
 
--自增字段
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
y_id 
int,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
y_username 
varchar(40),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
y_password 
varchar(40))
 
 
 
 
 
 
 
--向临时表中写入数据
 
 
 
 
 
 
 
insert 
into 
#t 
 
 
 
 
 
 
 
 
 
 
select 
y_id,y_username,y_password 
from 
dbo.[user]
 
 
 
 
 
 
 
 
 
 
 
 
 
order 
by 
y_id 
desc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--取得记录总数 
 
 
 
 
 
 
 
declare 
@iRecordCount 
int
 
 
 
 
 
 
 
set 
@iRecordCount 
= 
@@rowcount
 
 
 
 
 
 
 
--确定总页数
 
 
 
 
 
 
 
IF 
@iRecordCount%@iPageSize=0
 
 
 
 
 
 
 
 
 
 
SET 
@iPageCount=CEILING(@iRecordCount/@iPageSize)
 
 
 
 
 
 
 
ELSE
 
 
 
 
 
 
 
 
 
 
SET 
@iPageCount=CEILING(@iRecordCount/@iPageSize)+1
 
 
 
 
 
 
 
 
--若请求的页号大于总页数,则显示最后一页
 
 
 
 
 
 
 
IF 
@iPage 
>
 
@iPageCount
 
 
 
 
 
 
 
 
 
 
SELECT 
@iPage 
= 
@iPageCount
 
 
 
 
 
 
 
--确定当前页的始末记录
 
 
 
 
 
 
 
DECLARE 
@iStart 
int 
 
 
 
--start 
record
 
 
 
 
 
 
 
DECLARE 
@iEnd 
int 
 
 
 
 
 
--end 
record
 
 
 
 
 
 
 
SELECT 
@iStart 
= 
(@iPage 
- 
1) 
* 
@iPageSize
 
 
 
 
 
 
 
SELECT 
@iEnd 
= 
@iStart 
+ 
@iPageSize 
+ 
1
 
 
 
 
 
 
 
--取当前页记录 
 
 
 
 
 
 
 
 
 
 
select 
* 
from 
#t 
where 
ID>
@iStart 
and 
ID<
@iEnd
 
 
 
 
 
 
 
--删除临时表
 
 
 
 
 
 
 
DROP 
TABLE 
#t
 
 
 
 
 
 
 
--返回记录总数
 
 
 
 
 
 
 
return 
@iRecordCount
 
 
 
 
end
GO
3、显示记录list2.asp
<
!--
#include 
file="
conn.asp"
-->
<
%
&
#39
**调用分页存储过程**
 
 
 
 
DIM 
pagenow,pagesize,pagecount,recordcount
 
 
 
 
DIM 
MyComm,MyRst
 
 
 
 
pagenow 
=Request("
pn"
) 
 
 
 
 
&
#39
自定义函数用于验证自然数
 
 
 
 
if 
pagenow 
= 
"
"
 
then 
pagenow 
= 
1
 
pagenow=CInt(pagenow)
 
 
 
 
pagesize 
= 
2
 
 
 
 
Set 
MyComm 
= 
Server.CreateObject("
ADODB.Command"
)
 
 
 
 
with 
MyComm
 
 
 
 
 
 
 
.ActiveConnection 
= 
conn 
 
 
 
 
 
 
 
 
 
&
#39
conn是数据库连接字串
 
 
 
 
 
 
 
.CommandText 
 
 
 
 
 
= 
"
getUserList"
 
 
 
 
 
&
#39
指定存储过程名
 
 
 
 
 
 
 
.CommandType 
 
 
 
 
 
= 
4 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
&
#39
表明这是一个存储过程
 
 
 
 
 
 
 
.Prepared 
 
 
 
 
 
 
 
 
= 
true 
 
 
 
 
 
 
 
 
 
 
 
 
 
&
#39
要求将SQL命令先行编译
 
 
 
 
 
 
 
&
#39
返回值(记录总量) 
 
 
 
 
 
 
 
.Parameters.Append 
.CreateParameter("
RETURN"
,2,4)
 
 
 
 
 
 
 
&
#39
出参(总页数)
 
 
 
 
 
 
 
.Parameters.Append 
.CreateParameter("
@iPageCount"
,3,2)
 
 
 
 
 
 
 
&
#39
入参(当前页号)
 
 
 
 
 
 
 
.P
1、数据库和字段,conn.asp见
http://www.aspprogram.cn/detail.asp?id=35
请在表中添加几条记录
2、存储过程代码
 
 
 
 
CREATE 
PROCEDURE 
dbo.getUserList
 
 
 
 
 
 
 
@iPageCount 
int 
OUTPUT, 
 
 
--总页数
 
 
 
 
 
 
 
@iPage 
int, 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--当前页号
 
 
 
 
 
 
 
@iPageSize 
int 
 
 
 
 
 
 
 
 
 
 
 
--每页记录数
 
 
 
 
as
 
 
 
 
set 
nocount 
on
 
 
 
 
begin
 
 
 
 
 
 
 
--创建临时表 
 
 
 
 
 
 
 
create 
table 
#t 
(ID 
int 
IDENTITY, 
 
 
--自增字段
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
y_id 
int,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
y_username 
varchar(40),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
y_password 
varchar(40))
 
 
 
 
 
 
 
--向临时表中写入数据
 
 
 
 
 
 
 
insert 
into 
#t 
 
 
 
 
 
 
 
 
 
 
select 
y_id,y_username,y_password 
from 
dbo.[user]
 
 
 
 
 
 
 
 
 
 
 
 
 
order 
by 
y_id 
desc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--取得记录总数 
 
 
 
 
 
 
 
declare 
@iRecordCount 
int
 
 
 
 
 
 
 
set 
@iRecordCount 
= 
@@rowcount
 
 
 
 
 
 
 
--确定总页数
 
 
 
 
 
 
 
IF 
@iRecordCount%@iPageSize=0
 
 
 
 
 
 
 
 
 
 
SET 
@iPageCount=CEILING(@iRecordCount/@iPageSize)
 
 
 
 
 
 
 
ELSE
 
 
 
 
 
 
 
 
 
 
SET 
@iPageCount=CEILING(@iRecordCount/@iPageSize)+1
 
 
 
 
 
 
 
 
--若请求的页号大于总页数,则显示最后一页
 
 
 
 
 
 
 
IF 
@iPage 
>
 
@iPageCount
 
 
 
 
 
 
 
 
 
 
SELECT 
@iPage 
= 
@iPageCount
 
 
 
 
 
 
 
--确定当前页的始末记录
 
 
 
 
 
 
 
DECLARE 
@iStart 
int 
 
 
 
--start 
record
 
 
 
 
 
 
 
DECLARE 
@iEnd 
int 
 
 
 
 
 
--end 
record
 
 
 
 
 
 
 
SELECT 
@iStart 
= 
(@iPage 
- 
1) 
* 
@iPageSize
 
 
 
 
 
 
 
SELECT 
@iEnd 
= 
@iStart 
+ 
@iPageSize 
+ 
1
 
 
 
 
 
 
 
--取当前页记录 
 
 
 
 
 
 
 
 
 
 
select 
* 
from 
#t 
where 
ID>
@iStart 
and 
ID<
@iEnd
 
 
 
 
 
 
 
--删除临时表
 
 
 
 
 
 
 
DROP 
TABLE 
#t
 
 
 
 
 
 
 
--返回记录总数
 
 
 
 
 
 
 
return 
@iRecordCount
 
 
 
 
end
GO
3、显示记录list2.asp
<
!--
#include 
file="
conn.asp"
-->
<
%
&
#39
**调用分页存储过程**
 
 
 
 
DIM 
pagenow,pagesize,pagecount,recordcount
 
 
 
 
DIM 
MyComm,MyRst
 
 
 
 
pagenow 
=Request("
pn"
) 
 
 
 
 
&
#39
自定义函数用于验证自然数
 
 
 
 
if 
pagenow 
= 
"
"
 
then 
pagenow 
= 
1
 
pagenow=CInt(pagenow)
 
 
 
 
pagesize 
= 
2
 
 
 
 
Set 
MyComm 
= 
Server.CreateObject("
ADODB.Command"
)
 
 
 
 
with 
MyComm
 
 
 
 
 
 
 
.ActiveConnection 
= 
conn 
 
 
 
 
 
 
 
 
 
&
#39
conn是数据库连接字串
 
 
 
 
 
 
 
.CommandText 
 
 
 
 
 
= 
"
getUserList"
 
 
 
 
 
&
#39
指定存储过程名
 
 
 
 
 
 
 
.CommandType 
 
 
 
 
 
= 
4 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
&
#39
表明这是一个存储过程
 
 
 
 
 
 
 
.Prepared 
 
 
 
 
 
 
 
 
= 
true 
 
 
 
 
 
 
 
 
 
 
 
 
 
&
#39
要求将SQL命令先行编译
 
 
 
 
 
 
 
&
#39
返回值(记录总量) 
 
 
 
 
 
 
 
.Parameters.Append 
.CreateParameter("
RETURN"
,2,4)
 
 
 
 
 
 
 
&
#39
出参(总页数)
 
 
 
 
 
 
 
.Parameters.Append 
.CreateParameter("
@iPageCount"
,3,2)
 
 
 
 
 
 
 
&
#39
入参(当前页号)
 
 
 
 
 
 
 
.P
sql存储过程----分页显示表中的记录