使用 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 子句中。