I read that setRange is implemented efficiently for MySQL, Postgresql, HSQL and Oracle.
Why do not implemented efficiently it also for MS SQL? Latest versions (seems since MSSQL 2005) support needed capability. Use WITH Ordered AS feature for this.
WITH Ordered AS
ROW_NUMBER() OVER (ORDER BY r.Id DESC) AS RowNumber,
r.Id AS 'Id',
r.Status AS 'Status',
r.FirstName AS 'FirstName',
FROM Reports r
) SELECT *
WHERE RowNumber BETWEEN 100 AND 130
Something similar to Oracle ROWNUM