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

问一个SQL语句 如果加个分页效果

SELECT top 5 O.OrderType,O.ShippingMethod,  OA.* FROM Orders O ,OrderAddress  OA 
WHERE O.ORDERID =OA.OrderID  AND O.OrderStatusID<690 AND IsHoldOn =0 AND OA.IsBillingAddress=0 AND O.IsDeleted=0 

上面语句是查询 Orders O ,OrderAddress OA 这二个表数据 

for(int i=0;i<10;i++){
 我现在是需求是 这个循环 去使用上面的语句, 上面每次查询5 条记录,分页的条件就是这个i 值  就是i=0 查询前5条, i=1 查询6到10条, 
}
求大家帮忙个 上面语句如何加个分页效果。

------解决方案--------------------
你直接在select的时候,添加一个新列,使用ROW_NUMBER() as ID,具体使用google一下,然后where ID between 6 and 10直接选取数据。
你现在的设计,会返回所有数据,引起不必要的资源消耗。
------解决方案--------------------


select top(5) * from 
(
select top((@i+1) * 5) O.OrderType,O.ShippingMethod,  OA.* FROM Orders O ,OrderAddress  OA 
WHERE O.ORDERID =OA.OrderID  AND O.OrderStatusID<690 AND IsHoldOn =0 AND OA.IsBillingAddress=0 AND O.IsDeleted=0 
order by O.ORDERID asc
)
order by 
O.ORDERID desc