1、mssql
用兩次 TOP 命令取得我們所要的分頁資料,例如:
SELECT * FROM
(
SELECT TOP(
PageSize
) * FROM
(
SELECT TOP (
PageSize
*
PageIndex
) *
FROM Articles
ORDER BY PubTime DESC
)
ORDER BY PubTime ASC
)
ORDER BY PubTime DESC 2、oracle
對於 Oracle 資料庫,有幾處不同嚴重妨礙了上面幾個方法的實施,比如,Oracle 不支援 TOP 關鍵字:不過這個好像並不十分嚴重,因為它提供了 rownum 這個隱式遊標,可以實現與 TOP 類似的功能,如:
SELECT TOP 10 ... FROM WHERE ...
要寫成
SELECT ... FROM ... WHERE ... AND rownum <= 10
rownum 是記錄序號(1,2,3...),但有一個比較麻煩的事情是:如果 SQL 陳述式中有 ORDER BY ... 排序的時候,rownum 居然是先“標號”後排序!這樣,這個序號如果不加處理是不合乎使用需求的。
可以如下分頁:(編號 Ora1)
SELECT * FROM
(
SELECT A.*, rownum r
FROM
(
SELECT *
FROM Articles
ORDER BY PubTime DESC
,articleID --// 在排序時,加上一個或多個欄位(如主鍵欄位、
ROWID),使排序結果具有唯一性
) A
WHERE rownum <= PageUpperBound
) B
WHERE r > PageLowerBound;
其中藍色部分可以改為任意的、需要的 SQL SELECT 語句,這點倒是挺方便的。
PS: Oracle
的
rownum
不支援
>,>=,=,between...and
,只能用以上符號
(<
、
<=
、
!=)