What’s the best way to page the results from a complex query in SQL Server 2005 and 2008?
I came up with the following approach:
-
Perform the query, save its results to a table variable or temp table.
-
Use the following code:
DECLARE @Rows INT = (SELECT COUNT(*) FROM @TableVariable) DELETE TV FROM @TableVariable TV JOIN (SELECT TV2.PrimaryKey, ROW_NUMBER() OVER(...) AS RowNo FROM @TableVariable TV2) N ON TV.PrimaryKey = TV2.PrimaryKey WHERE N.RowNo < @FromRow OR N.RowNo > @ToRow SELECT PrimaryKey, SomeComputedField, ... FROM @TableVariable RETURN @Rows
However, I don’t have any experience paging huge datasets myself. What do other SOers have to suggest?
A STORED PROCEDURE body could be written as:
Then you would need to provide the STORED PROCEDURE with the range (@low and @high) and you would need the temp table of course.
P.S. Also, I think your variable declaration will only work on 2008, if I remember correctly 2005 does not support single line instantiation and initialization.