【发布时间】:2011-07-04 22:45:44
【问题描述】:
我正在尝试在 SQL Server 的存储过程中进行分页,如下所示:
/*Assign a row number to each row*/
SELECT
ROW_NUMBER() OVER (ORDER BY A, B, C ASC) AS ROW_NUMBER,
A, B, C
FROM ABC
WHERE ROW_NUMBER BETWEEN @startRecordNumber and @endRecordNumber
但是,我的调用代码还想知道分页前的原始结果集中有多少结果。所以,我把我的代码改成这样:
/*Put the results into a temp table first*/
SELECT
ROW_NUMBER() OVER (ORDER BY A, B, C ASC) AS ROW_NUMBER,
A, B, C
INTO #TOTAL_RESULTS
FROM ABC
/*Get the total results from @@RowCount*/
declare @totalResults bigint
set @totalResults = @@RowCount
/*Now just get the desired page from the temp table*/
SELECT
A, B, C
FROM #TOTAL_RESULTS
WHERE ROW_NUMBER BETWEEN @startRecordNumber and @endRecordNumber
DROP TABLE #TOTAL_RESULTS
这对我来说感觉很迂回。有什么方法可以在不制作临时表的情况下获得原始结果集的大小?也许只是一个公用表表达式?我似乎想不出办法。
如果重要的话,这里是 ABC 的架构:
ABC
A(PK,smallint 不为空)
B(PK,smallint 不为空)
C (PK, smallint 不为空)
【问题讨论】:
标签: sql-server database pagination