Вам нужно сделать что-то вроде этого:
;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 Таблица 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
пункт. See this blog post (или тонны других) для получения дополнительной информации и более образцов.
Пожалуйста, не используйте '' строковые разделители'' для псевдонимов. Этот синтаксис нестандартен, может быть очень запутанным (например, 'SELECT 'a' 'b'') и устарел в SQL Server. Используйте '[квадратные скобки]' (также не стандартные) или '' двойные кавычки '' (стандартные) или без разделителей. Для получения дополнительной информации и много дебатов см. Http://sqlblog.com/blogs/aaron_bertrand/archive/2012/01/23/bad-habits-to-kick-using-as-instead-of-for-column-aliases. aspx –
PS дискуссия о том, что вы * должны использовать. Существует мало аргументов в пользу использования одинарных кавычек *. –
@Aaron: thnx, я не был уверен, что это было устарело или не разрешено в последней версии. –