在我的ASP页面中进行分页的最佳方法是什么

时间:2009-11-15 05:33:22

标签: sql-server asp-classic paging

在显示项目列表时,在ASP页面中进行分页的最佳方法是什么?

我知道SQL Server中存在的MySQL LIMIT子句与2000或2005不相同。

如何从数据库中检索某些特定记录(记录20到30)?

我是否需要从数据库中获取所有记录并在我的ASP页面中执行某些操作以显示所需的记录?

3 个答案:

答案 0 :(得分:4)

在显示项目列表时,在ASP页面中进行分页的最佳方法是什么?

我只想为Wheat先生的回答添加一个功能。为什么不尝试使用linq的Take()和Skip()功能(显然如果你使用的是dotnet framework 3.5 +)

使用大型数据集时确实很有帮助。

看一看 Using Take and Skip method in LINQ queries

我知道SQL服务器中没有MySQL LIMIT子句(2000和2005都应该支持)。我可以从DB中检索一些特定的记录(记录20-30)吗?

您可以使用排名函数Row_Number()以及其他替代方法在SQLSERVER 2005+中执行此操作。随附的示例示例

首先,我创建一个虚拟表并插入约50条记录

declare @tbl table(name varchar(50),age int)
;with num_cte as
(   select 1 as rn
    union all
    select rn+1 from num_cte where rn<50
)  
insert @tbl
select  names ,rn + 20 ageval                
from num_cte
cross apply( select  'name' + CAST(rn as varchar(2))  AS names) names
select * from @tbl

现在通过使用Row_Number()函数,我将获取20和20之间的记录。 30

select name,age from(
select ROW_NUMBER()over (order by age) as rownum,name,age from @tbl) X
where X.rownum between 20 and 30

但是,为了在SQL SERVER 2000中实现相同功能,以下查询将有助于

select name,age from(
select t1.name,t1.age,
(select count(*)+1 from @tbl where name<>t1.name and age<=t1.age) rownum
from @tbl t1
)X(name,age,rownum)
where rownum between 20 and 30

答案 1 :(得分:1)

答案 2 :(得分:0)

您需要使用ROW_NUMBER(SQL Server 2005+)

 SELECT * FROM
    (SELECT a.*, ROW_NUMBER() OVER (ORDER BY hire_date) rn
    FROM hr.employees AS OF TIMESTAMP (TIMESTAMP '2009-01-29 10:30:00') a)
 WHERE rn BETWEEN 10 AND 19

<子> Related answer

使用ROW_NUMBER,您正在对固有的未排序组(表)进行数字化和排序。一旦你有一个ordered set而不仅仅是一个set,你现在可以使用句子“我想要10到19之间的所有行”是有道理的。

您必须使用ASP代码来保留上部和下部元素,因此您可以要求显示下一个或上一个行子集。