日期:2014-05-17  浏览次数:21004 次

谁有好点的分页代码可以调用的或给点分页程序的建议
以前是access数据库,大概2万条数据,我都是这样分页的:
...
rs.Open   sql,conn,1,1
iCount=rs.recordcount
n=0
    If   Not   isempty(request( "page "))   Then      
        pagecount=cint(request( "page "))
    Else
        pagecount=1
    End   If
    rs.pagesize=30
    rs.AbsolutePage=pagecount
    do   while   not   rs.eof
...
现在换成了mssql数据库感觉比用access还慢啊??以后估计还会更多,几十万条数据那不拖得不行了,记得以前有人写过效率比较不错的asp分页代码的,然后直接可以用的,大家给想想办法,分页怎么处理比较好,谢谢啦!!!!

------解决方案--------------------
用存储过程分页
你baidu下
------解决方案--------------------
1.应该不会比access慢,sql语句设计是不是考虑了索引等因素。
2.稍大点的数据量可以用存储过程分页,每次只取n条。
3.几十万的数据分页似乎已经不太适合了,每页20条要n万页。还是要从业务角度减少数据量。

分页存储过程参考:
CREATE PROCEDURE sp_paging
(
@strTblName VARCHAR(100), --表名或视图表
@strFields VARCHAR(4000) = '* ', --欲选择字段列表
@strOrdField VARCHAR(100), --排序字段
@strKeyField VARCHAR(100), --主键
@intPageNo INT = 0, --页号,从0开始
@intPageSize INT = 10, --页尺寸
@strWhere VARCHAR(4000) = ' ', --条件
@bitOrdType BIT = 1 --排序,1=降序,0=升序
)
AS
SET NOCOUNT ON
DECLARE @strSQL VARCHAR(6000)

IF @intPageNo = 0
BEGIN
SET @strSQL = 'SELECT TOP ' + CAST(@intPageSize AS VARCHAR) + ' ' + @strFields + ' FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL = @strSQL + ' WHERE ' + @strWhere
IF @bitOrdType = 1
SET @strSQL = @strSQL + ' ORDER BY ' + @strOrdField + ' DESC '
ELSE
SET @strSQL = @strSQL + ' ORDER BY ' + @strOrdField + ' ASC '
END
ELSE
BEGIN
SET @strSQL = 'DECLARE @intCurPageNo int; '
SET @strSQL = @strSQL + 'DECLARE @intNextPageNo int; '
SET @strSQL = @strSQL + 'SET @intCurPageNo = ' + CAST(@intPageNo AS VARCHAR) + '* ' + CAST(@intPageSize AS VARCHAR) + '; '
SET @strSQL = @strSQL + 'SET @intNextPageNo = ' + CAST(@intPageNo+1 AS VARCHAR) + '* ' + CAST(@intPageSize AS VARCHAR) + '; '
SET @strSQL = @strSQL + 'DECLARE @strSQL VARCHAR(6000); '
IF @bitOrdType = 1
BEGIN
SET @strSQL = @strSQL + 'SET @strSQL = ' 'SELECT ' + @strFields + ' FROM (SELECT TOP ' ' + CAST(@intNextPageNo AS VARCHAR) + ' ' * FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL = @strSQL + ' WHERE ' + @strWhere
SET @strSQL = @strSQL + ' ORDER BY ' + @strOrdField + ' DESC) AS atmp WHERE ' + @strKeyField
+ ' NOT IN (SELECT TOP ' ' + CAST(@intCurPageNo AS VARCHAR) + ' ' ' + @strKeyField + ' FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL = @strSQL + ' WHERE ' + @strWhere
SET @strSQL = @strSQL + ' ORDER BY ' + @strOrdField + ' DESC) ORDER BY ' + @strOrdField + ' DESC ' '; '
END
ELSE
BEGIN
SET @strSQL = @strSQL + 'SET @strSQL = ' 'SELECT ' + @strFields + ' FROM (SELECT TOP ' ' + CAST(@intNextPageNo AS VARCHAR) + ' ' * FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL = @strSQL + ' WHERE ' + @strWhere
SET @strSQL = @strSQL + ' ORDER BY ' + @strOrdField + ' ASC ) AS atmp WHERE ' + @strKeyField