显示项目列表时在 ASP 页面中进行分页的最佳方法是什么?
我知道 SQL Server(2000 年或 2005 年)中没有与 MySQL 的
LIMIT
子句等效的语句。
如何从数据库中检索某些特定记录(记录20至30)?
我是否需要从数据库中获取所有记录并在 ASP 页面中执行某些操作来显示所需的记录?
显示项目列表时在 ASP 页面中进行分页的最佳方法是什么?
我只是想在小麦先生的回答中再添加一项功能。为什么你不尝试使用 linq 的 Take () 和 Skip() 功能(显然如果你使用 dotnet 框架 3.5+)
在处理大型数据集时确实很有帮助。
看看 在 LINQ 查询中使用 Take 和 Skip 方法
我知道SQL Server中没有MySQL LIMIT子句(2000和2005都应该支持)。我如何从数据库中检索某些特定记录(记录20 -30)?
您可以在 SQLSERVER 2005+ 中通过使用排名函数 Row_Number() 以及其他替代方法来执行此操作。此处包含一个示例
首先,我创建一个虚拟表并插入大约 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 到 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
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
使用
ROW_NUMBER
,您可以对本质上未排序的组(表格)进行编号和排序。一旦你有了一个有序集而不仅仅是一个集,你现在就可以说“我想要从10到19的所有行”这句话就有意义了。
您必须使用 ASP 代码来保留上部和下部元素,以便您可以要求显示下一个或上一个行子集。