【发布时间】:2011-11-18 04:49:01
【问题描述】:
我正在尝试在一个存储过程中返回一页数据以及所有数据的行数,如下所示:
WITH Props AS
(
SELECT *,
ROW_NUMBER() OVER (ORDER BY PropertyID) AS RowNumber
FROM Property
WHERE PropertyType = @PropertyType AND ...
)
SELECT * FROM Props
WHERE RowNumber BETWEEN ((@PageNumber - 1) * @PageSize) + 1 AND (@PageNumber * @PageSize);
我无法返回行数(最高行数)。
我知道这已经被讨论过(我见过这个:
Efficient way of getting @@rowcount from a query using row_number) 但是当我在 CTE 中添加 COUNT(x) OVER(PARTITION BY 1) 时,性能会下降,并且上面的查询通常不需要时间来执行。我认为这是因为计数是针对每一行计算的?我似乎无法在另一个查询中重用 CTE。 Table Props 有 100k 条记录,CTE 返回 5k 条记录。
【问题讨论】:
-
应该重新标记为 SQL Server 问题。我会为你做的,但你只能使用 5 个标签,而且我不知道你要删除哪个标签。
标签: sql sql-server common-table-expression row-number rowcount