資料表必須擁有自動遞增且唯一的主鍵欄位(如 IDENTITY 欄位),否則以下方法可能產生錯誤結果。
SELECT DISTINCT TOP 8 CategoryID
FROM tbl_Product_Products
WHERE (UserID = 73)
AND (CategoryID > (
SELECT MAX(categoryid)
FROM (
SELECT DISTINCT TOP 16 categoryid
FROM tbl_product_products
WHERE userid = 73
ORDER BY categoryid
) AS b
))
ORDER BY CategoryID;
原理:內層取前 16 筆,外層取其最大值作為下一頁起始邊界,再取後 8 筆。適用於無法使用 OFFSET/FETCH 的舊版 SQL Server。
SELECT TOP 10 *
FROM [order details]
WHERE orderid > ALL (
SELECT TOP 10 orderid
FROM [order details]
ORDER BY orderid
)
ORDER BY orderid;
原理:排除前 10 筆的 orderid,取得第 11-20 筆。> ALL 等同於「大於子查詢最大值」。
SELECT *
FROM [order details]
ORDER BY orderid
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;
OFFSET/FETCH 語法更直觀、效能更佳,請優先使用新版本支援的標準分頁語法。