2013-07-27 4 views
0

Я выбрал первые 50 000 строк с TOP 50,000, теперь я хочу получить следующую группу из 50 000. Я не могу использовать ROW_NUMBER, так как записи не имеют id. Я использую SQL Server 2012 с помощью SQL Server Management Studio.Выбрать следующие 50000 записей

Как я могу получить записи, которые появляются после первых 50 000?

+5

Если вы выбрали 'top 50000' без' ORDER BY' на каком-то столбце (например, 'id', который, как вы говорите, отсутствуют), тогда нет никакой гарантии, что даже повторное выполнение * тот же * запрос вернет * то же самое 50000 строк, не говоря уже о любом способе гарантировать возможность получения «следующего» 50000. –

ответ

0

Если у вас есть какой-нибудь способ, чтобы гарантировать последовательный порядок результатов я не могу понять, почему вы не можете использовать row_number с общим выражением таблицы, как это:

;WITH CTE AS 
(
    SELECT *, ROW_NUMBER() OVER(ORDER BY something_unique DESC) AS 'Row' 
    FROM my_table 
) 
-- To get the first 50k rows: 
SELECT * FROM CTE WHERE Row BETWEEN 0 AND 50000 
-- To get the next 50k rows: 
--SELECT * FROM CTE WHERE Row BETWEEN 50001 AND 100000 

Это не очень эффективно, хотя, как вы строите номер строки по всей таблице, хотя вам нужно всего лишь 50 тыс. Если возможно, вам может потребоваться добавить дополнительный столбец в исходную таблицу, чтобы включить некоторые искусственные цифры.

Как указано в комментариях, только с использованием TOP X без заказа результатов сначала будут отображаться несогласованные результаты, так как заказ не гарантируется, если явно не указано.

3

С SQL Server 2012 вы получаете следующие OFFSET и FETCH NEXT ключевых слов в предложении ORDER BY.

Таким образом, вы можете выбрать первые 50`000 строки с:

SELECT (list of columns) 
FROM dbo.YourTable 
WHERE (some condition) 
ORDER BY (some column) 
    OFFSET 0 ROWS FETCH NEXT 50000 ROWS ONLY 

, а затем на следующий 50'000 позже:

SELECT (list of columns) 
FROM dbo.YourTable 
WHERE (some condition) 
ORDER BY (some column) 
    OFFSET 50000 ROWS FETCH NEXT 50000 ROWS ONLY 

(только боковой ноты: страница размер 50'000 строк кажется слишком большой - как насчет 1'000 или что-то)

См?для получения более подробной информации и справочной информации

Смежные вопросы