在显示项目列表时,在ASP页面中进行分页的最佳方法是什么?
我知道SQL Server中存在的MySQL LIMIT
子句与2000或2005不相同。
如何从数据库中检索某些特定记录(记录20到30)?
我是否需要从数据库中获取所有记录并在我的ASP页面中执行某些操作以显示所需的记录?
答案 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代码来保留上部和下部元素,因此您可以要求显示下一个或上一个行子集。