Efficient way of getting @@rowcount from a query using row_number

sql, sql-server, sql-server-2005, t-sql

Solution

Check out the COUNT(*) aggregate when used with OVER(PARTITON BY..), like so:

    SELECT
     ROW_NUMBER() OVER(ORDER BY object_id, column_id) as RowNum
    , COUNT(*) OVER(PARTITION BY 1) as TotalRows
    , * 
    FROM master.sys.columns

This is IMHO the best way to do it without having to do two queries.

Problem

I have an expensive query using the row_number over() functionality in SQL Server 2005. I return only a sub list of those records as the query is paginated. However, I would like to also return the total number of records, not just the paginated subset. Running the query effectively twice to get the count is out of the question. Selecting count(*) is also out of the question as the performance is absolutely terrible when I've tried this. What I'd really love is @@ROW_NUMBERROWCOUNT :-)

Original source

Related problems