打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[SQL Server]幾種分頁(Paging)寫法

[SQL Server]幾種分頁(Paging)寫法

 
 
 

以下介紹幾種在SQL Server上簡單的分頁做法,大致分為三種:

1.Order By搭配not in

2.Temp Table

3.ROW_NUMBER() function

 

以下以Northwind資料庫作為範例:

Order By搭配not in

1Select Top 10 CustomerID, CompanyName ,ContactName, Country from Customers where CustomerID Not in
2(Select top 10 CustomerID from Customers order by CustomerID)
3Order by CustomerID

此做法是透過Where條件中的not in排除掉前十筆資料,以下是前20筆資料:

 

not in會幫忙排除掉CustomerID為1-10筆的內容,因此我們可以Select到11-20筆的資料結果:

 

Temp Table

1select   identity(int,1,1) RowNum, CustomerID, CompanyName, ContactName, Country  into TempTable from Customers

將Select出來的欄位資料放到另一個Temp Table中,該Temp Table的第一個欄位是identity,為自動遞增的欄位,接著我們可對該Temp Table的RowNum(identity欄位)進行條件過濾;

1Select from Temp where RowNum >= 11 AND RowNum <= 20

由於第一個欄位是自動遞增,我們就可以將它當成是我們所要的RowNum來進行查詢,得到的資料如下:

 

ROW_NUMBER() Function

這個功能是在SQL Server 2005後的版本才有提供的,我們可透過以下的語法來進行處理:

1SELECT  *
2FROM (SELECT  ROW_NUMBER() OVER (ORDER BY CustomerID)
3AS RowNum, CustomerID, CompanyName, ContactName, Country FROM Customers)
4AS NewTable
5WHERE RowNum >= 11 AND RowNum <= 20

Select 出來的資料如下:

 

在管理便利性上,我個人比較不傾向選擇Temp Table的方式,1.3兩種做法是我比較會去使用的,而如果可以選擇的話我應該會以ROW_NUMBER()這個Function的解法優先,我們以這兩句SQL的執行計畫中來看就可以看出使用ROW_NUMBER()的執行成本是較低的,主要差異應在於ROW_NUMBER()只做了一次的Clustered Index Scan,而另一個方法則是兩次:

 

參考資料:

MSDN ROW_NUMBER(Transact-SQL)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ajax 分页
SQL分页语句
C#操作xml文件:使用XmlDocument 实现读取和写入
【SQL】SQL分页查询总结
一步一步学Linq to sql(四):查询句法 - LoveCherry - 博客园
SQL Server中临时表与表变量的区别 - NiuJinMing - JavaEye技...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服