我正在尝试编写一个存储过程,返回一组数据的页面及其总行数。该存储过程如下所示:
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。表Props有10万条记录,CTE返回5千条记录。