2016-11-07 17 views
1
select column 
from table 
order by row_number() over() 
limit 1000 offset 200; 

У меня есть вышеуказанный запрос в PostgreSQL. Я хочу эквивалент SQL Server выше. Я попробовал следующее:SQL Server эквивалент запроса Postgres

select top 1000 offset 200 column 
from table 
order by row_number() over (ORDER BY column ASC) 
limit 1000 offset 200; 

, но это вызывает следующую ошибку.

Неправильный синтаксис около '17000000'.

ответ

2
SELECT column 
    FROM table 
    ORDER BY Row_Number() Over (Order By column) 
    OFFSET 200 ROWS 
    FETCH NEXT 1000 ROWS ONLY; 

https://technet.microsoft.com/en-us/library/gg699618(v=sql.110).aspx

Обратите внимание, что вы действительно должны использовать ORDER BY предложении, которое гарантировано дать тот же самый порядок каждый раз.

+1

и использовать 'OFFSET .... FETCH' в SQL Server, вы *** обязательно *** определить явный' ORDER BY' .... –

+0

@marc_s Спасибо. Он отлично работал. – Kabhi

1

некоторые базы данных ничего не возвратят для INFORMATION_SCHEMA.COLUMNS со смещением 200, но я поставил его здесь для рабочего кода.

SELECT t.TABLE_NAME, t.COLUMN_NAME 
    , ROW_NUMBER() over (order by t.COLUMN_NAME asc) as RowNumber 
FROM INFORMATION_SCHEMA.COLUMNS as t 
ORDER BY ROW_NUMBER() over (order by t.COLUMN_NAME asc) 
OFFSET 200 ROWS 
FETCH NEXT 1000 ROWS ONLY