技术开发 频道

SQL Server 2005对结果集分页

【IT168技术文档】

介绍


    有了SQL Server 2005之后,我们使用分页查询比老版本容易多了。在本文将主要用到的是NorthWind数据库,所以可以仿照编写所列举的范例,尽量使例子简单化;因为任何复杂的东西都会都会造成混淆,我们从“传统”的方法着手,比如:SELECT, TOP,然后进入SQL Server 2005 分页的例子。

背景

    我们常常会碰到这样的一个问题或者说一系列问题,“如何在SQL中进行分页?在有很多个记录的情况下又如何做,比如10000个记录或者更多呢?”

    这必定是一个普遍的问题,每一个开发人员必须处理或者说解决的。具有非常大的数据库集的工作和分页大小是怎样的?从多种表所得到的结果集又是如何?

   因此,决定具体结合SQL Server 2005来研究这些问题。下面的方法是至今为止最容易的,建议采纳。但是这是非常罕见的,并非易事。

select * from mytable 
Where ID between 20 and 30
SQL Top

    SQL Top(从结果集返回记录)非常善于从结果集的每个尾部返回大量的记录。下面的例子通过命令qty获得了前10名顾客。在论坛上这是一个非常普遍的问题。尽管TOP也可以拉动一定百分比的记录,但是我们这里不讨论。

select top 10 * from customers -- This is a very basic example. 
select TOP 10 Customers.CustomerID, Customers.CompanyName, count(*) OrderCount
from Customers inner join Orders on Orders.CustomerID = Customers.CustomerID
GROUP BY Customers.CustomerID, Customers.CompanyName
ORDER BY OrderCount DESC
   这是很有用的,当你要把记录从11拉到20时就可以使用临时表。
SELECT TOP 30 * INTO 
#TEMP
from Customers
ORDER BY CompanyName ASC
SELECT TOP 10 *
INTO #TEMP2
from #Temp
ORDER BY CompanyName DESC
SELECT * FROM #TEMP2
    这对少数前几个页面或者前几个用户是种惩罚。如果拥有这样的用户,他们想从一页一页之后返回页面,将以使1000条记录返回10条来结束,这是非常低效的。可以在第一个临时表中内置一个身份,然后用一个SELECT声明来作替代。
0
相关文章