有時候我們需要這樣的處理:查詢出某資料表中的 M 到N筆資料.比如取出表A中第31筆到40筆数据(primary key: ID为自动编号,ID可能不是连续的)
在2000中我們可以這樣處理 select top (40-31+1) * from EmpSalay WHERE EmpID NOT IN (SELECT top(30-1) EmpID FROM [EmpSalay] order by EmpID ) 用top 來返回M 到N筆資料可以完成上面的動作.但是這個處理的限制也比較多比如ID要遞增.
現在2005提供了一個函數ROW_NUMBER() 來處理這樣的問題.很简单,ROW_NUMBER() 就是生成一个顺序的行号,而他生成顺序的标准,就是后面紧跟的OVER(ORDER BY youID).下面方法用SQL2005 提供的函數ROW_NUMBER() 來處理 M 到N筆資料的問題
(select *, ROW_NUMBER() over (order by EmpID) as row_number from EmpSalay)as temp where temp.row_number>=31 and temp.row_number<=40
下面的文章同樣可以解決該問題
Server 2005 中CET結合ROW_NUMBER()函數解決取得特定筆數資料的問題