Вам нужно сделать что-то вроде этого:
;WITH PaginatingData AS
(
Select id, name, ROW_NUMBER() OVER (ORDER BY id asc) as 'RowNo'
from customers
)
SELECT *
FROM PaginatingData
where RowNo between 50 AND 60
Используйте CTE (Common Table Expression - своего рода «встроенное представление») в качестве «оболочки», чтобы ваш RowNo
стал действительным именем столбца.
Как перспектива - с SQL Server 2012 вы сможете написать что-то вроде этого:
SELECT
id, name
FROM
dbo.customers
ORDER BY
id
OFFSET 50 ROWS
FETCH NEXT 10 ROWS ONLY
SQL Server 2012 будет иметь эту совместимую с ANSI SQL Standard нотацию для прямой подкачки страниц на основе предложения ORDER BY
. См. Этот блог (или множество других) для получения дополнительной информации и большего количества образцов.