WITH __actualSet AS
(
SELECT TOP (pagenumber * pagesize)+1 ..., ROW_NUMBER() OVER (sortclause | first field) AS __rowcnt
FROM ...
)
SELECT * FROM __actualSet
WHERE __rowcnt BETWEEN startCnt AND endCount
ORDER BY __rowcnt ASC