由于最近准备面试,所以把以前的零散的知识点整理一下.由于不经常用怕忘记,万一面试时丢分岂不可惜.
数据库分页有好多种,网上也有多种例子.在实际开发中我更偏向使用Top分页法.我觉得这也是来的最直接最简单的方法之一.
前几天看到一位网友写的在内存中缓存数据的方法来提高分页的效率,比如先取出前100页的数据放内存中,取数据的时候100页以内的数据就直接从内存中提取了,超过100页的数据就再读取101~200页的数据放内存中.我没有这样做过,也不知道会带来什么样的问题.当然他写的比我描述的详细的多.但我觉得这也是一个法子,有时间去研究一下.
SqlServer2000(V8)和Sqlserver2005(V9)的分页语句原理是一样的,只是在实现过程中有一点差别.V8由于变量无法直接在语句中使用,所以只好用拼接字符串来解决了.
V8中的分页存储过程
页索引@PageIndex 是从1开始的整数,而不是从零开始.今天写这段代码的时候,讲语句写成set @sql = N'
select top '+(@PageSize)+' * from Employees where EmployeeID not in
(select top '+((@PageIndex-1) * @PageSize)+' EmployeeID from Employees order by EmployeeID)'
老提示我出错说: 将nvarchar 值' select top ' 转换为数据类型为int 的列时发生语法错误。调试好久也没解决,最后找到以前写的代码才知道,少写了一个str()方法.
V9中的分页存储过程
同样页索引@PageIndex 是从1开始的整数.很明显V9的代码简洁多了.
其实每次看到调用这样的分页语句我的心里就很担心,因为每点击一次 “下一页” 数据库将进行一次 ”干活” .数据库会很累的.我想数据量小的话直接用控件(有些带分页功能的)自身的分页方法了,不然有点得不偿失的感觉.