2016-02-24 2 views
1

Я использую Microsoft SQL Server Management Studio, у меня есть минимальный опыт работы в SQL Server, но я использовал MySQL в прошлом и довольно хорошо разбираюсь в нем.SQL Server: большой DB Query In Chunks

Мой вопрос: у меня довольно большая база данных с более чем 130 м + записей.

Я хочу получить только столбец URL-адреса, но каждую запись в этом столбце.

Microsoft SQL Server Management Studio задерживается при сохранении файла из-за одной ошибки, и поэтому я пришел к выводу, что мне нужно сделать это в кусках.

Я бег этой команды в данный момент и сохранение в файл

SELECT TOP 20000000 [URL] 
FROM [dbo].[siteentry] 
WHERE [Content] LIKE '' 

Однако, когда эта команда заканчивается у меня есть 0 понятия, как пропустить первый 20000000 и продолжить на следующую партию 20000000, не убивая сервер ,

Любая помощь будет отличной.

ответ

2

С SQL Server , вы можете использовать OFFSET...FETCH команды:

SELECT [URL] 
FROM [dbo].[siteentry] 
WHERE [Content] LIKE '' 
ORDER BY (some column) 
    OFFSET 20000 ROWS 
    FETCH NEXT 20000 ROWS ONLY 

Для этого, чтобы работать, вы необходимо порядка некоторой колонки в таблице - что вы должны все равно, так как a TOP .... без ORDER BY бесполезен - вы получите произвольные строки

+0

Я отредактировал его для работы с ним :) Большое спасибо – Mason

0

Если все, что вы хотите, это текстовый файл, содержащий все адреса, то я предлагаю вам использовать bcp утилита командной строки:

bcp "SELECT url FROM [dbo].[siteentry] WHERE [Content] LIKE ''" queryout Output.txt -S Server -T -d DatabaseName -c 

Он будет генерировать файл сразу, не нужно разбить его на куски, и у вас не будет неприятностей из-за ошибок памяти из SSMS

+0

О, отлично дайте мне изучить этот метод. благодаря – Mason