救命 !如何从SQL Server分页过程中获取总行数?

The*_*der 3 sql-server-2005 data-paging

好的,我的SQL Server数据库中有一个存储注释的表.我的愿望是能够使用我的数据列表中的[Back],[Next],页码和[Last]按钮来浏览记录.我认为最有效的方法是使用只返回特定范围内的特定行数的存储过程.这就是我想出的

@PageIndex INT, 
@PageSize INT,
@postid int


AS
 SET NOCOUNT ON  
 begin

WITH tmp AS ( 
SELECT comments.*, ROW_NUMBER() OVER (ORDER BY dateposted ASC)  AS  Row
    FROM    comments
    WHERE     (comments.postid = @postid))

SELECT tmp.*
FROM tmp
WHERE Row between 

(@PageIndex - 1) * @PageSize + 1 and @PageIndex*@PageSize

end

RETURN 
Run Code Online (Sandbox Code Playgroud)

现在一切正常,我已经能够在我的数据列表寻呼机中实现[Next]和[Back]按钮.现在我需要所有注释的总数(不在当前页面中),以便我可以在我的寻呼机上实现我的页码和[Last]按钮.换句话说,我想在第一个select语句中返回总行数,即

  WITH tmp AS ( 
    SELECT comments.*, ROW_NUMBER() OVER (ORDER BY dateposted ASC)  AS  Row
        FROM    comments
        WHERE     (comments.postid = @postid))
set @TotalRows = @@rowcount
Run Code Online (Sandbox Code Playgroud)

@@ rowcount不起作用并引发错误.我也无法计算.*也可以工作.

有没有其他方法来获得总行数或我的方法注定失败.

Ben*_*aan 5

要获取页面的评论总数,需要单独的查询:

SELECT TotalRows = COUNT(*)
FROM comments
WHERE comments.postid = @postid
Run Code Online (Sandbox Code Playgroud)

将此数据带回同一查询的唯一方法是将数据存储为主存储过程的子查询,并返回存储过程中每行的总数.