使用 ROW NUMBER 和公用表表示式進行分頁
Version >= SQL Server 2008
ROW_NUMBER
函式可以為結果集中的每一行指定遞增數。結合使用 BETWEEN
運算子的公用表表示式 ,可以建立結果集的頁面。例如:第一頁包含結果 1-10,第二頁包含結果 11-20,第三頁包含結果 21-30,依此類推。
WITH data
AS
(
SELECT ROW_NUMBER() OVER (ORDER BY name) AS row_id,
object_id,
name,
type,
create_date
FROM sys.objects
)
SELECT *
FROM data
WHERE row_id BETWEEN 41 AND 50
注意:在 WHERE
子句中不能使用 ROW_NUMBER
,如:
SELECT object_id,
name,
type,
create_date
FROM sys.objects
WHERE ROW_NUMBER() OVER (ORDER BY name) BETWEEN 41 AND 50
雖然這會更方便,但在這種情況下 SQL Server 將返回以下錯誤:
Msg 4108,Level 15,State 1,Line 6
視窗函式只能出現在 SELECT 或 ORDER BY 子句中。