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
在上面的存储进程中,输入当前页号及每页记录数,返回当前页的记录集,总页数及记录总数。为了更具典型性,将记录总数以返回值的形式返回。以下是调用该存储进程的ASP代码(具体的分页操作略去):
'**调用分页存储进程**
DIM PAGENOW,PAGESIZE,PAGECOUNT,RECORDCOUNT
DIM MYCOMM,MYRST
PAGENOW = REQUEST("PN")
'自定义函数用于验证自然数
IF CHECKNAR(PAGENOW) = FALSE THEN PAGENOW = 1
PAGESIZE = 20
SET MYCOMM = SERVER.CREATEOBJECT("ADODB.COMMAND")
WITH MYCOMM
.ACTIVECONNECTION = MYCONSTR 'MYCONSTR是数据库连接字串
.COMMANDTEXT = "GETUSERLIST" '指定存储进程名
.COMMANDTYPE = 4 '表明这是一个存储进程
.PREPARED = TRUE '要求将SQL命令先行编译