SQL Server上簡單的分頁


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

1.Order By搭配not in

2.Temp Table

3.ROW_NUMBER() function

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

Order By搭配not in

Select Top 10 CustomerID, CompanyName ,ContactName, Country 
from Customers where CustomerID Not in
(Selecttop 10 CustomerID from Customers orderby CustomerID)
Order by CustomerID  


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

image

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

image

Temp Table

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

 

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

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

 

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

image

ROW_NUMBER() Function

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

 
SELECT  *
FROM (SELECT  ROW_NUMBER() OVER (ORDERBYCustomerID) 
AS RowNum, CustomerID, CompanyName, ContactName, CountryFROMCustomers) 
AS NewTable
WHERE RowNum >= 11 AND RowNum <= 20

Select 出來的資料如下:

image

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

image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值