На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Pr0[)!9Y, Akina, JoeUser
  
> Выгрузка из SQL в TXT, как сделать цикл
Всем привет.
Есть представление, например
ExpandedWrap disabled
    CREATE VIEW SM1 AS SELECT  DISTINCT TOP(100000000) PaWo FROM mPa WHERE Length>7 AND Cat<>'EUc_1' and Typ='all'

его я выгружаю в файлик
ExpandedWrap disabled
    exec PaWo..xp_cmdshell 'bcp "SELECT * FROM PaWo.dbo.SM1 " queryout e:\123.txt -c -C 1251 -r \n -T'

с этим проблем нет - все работает.
Но как сделать так, чтобы выгружалось не в 1 файл с 100000000 записей а в 1000 по 100000.
То что делать нужно в цикле я понимаю :) , но вот личный уровень кунг-фу не позволяет это сделать. :(
Буду рад любым подсказкам.

PS: сейчас решаю задачу отдельным приложением, что очень долго и громоздко.
Выгрузить всё в один файл, а потом внешним приложением (простейший VBS-скрипт) порубить его на нужное число кусков с нужным количеством строк на кусок будет гораздо быстрее.
Хотя бы потому, что для выгрузки в несколько файлов средствами (хранимая процедура) сервера потребуется в запрос добавить сортировку, причём ключ сортировки должен быть уникальным.
Сообщение отредактировано: Akina -
Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
Есть претензии ко мне как к участнику? да ради бога.
Не нравятся мои ответы? не читайте их.
В общем, берегите себя. Нервные клетки не восстанавливаются.
Akina, 100000000 это очень скромная часть. База "весит" десятки гигов. Потому и не хочу привлекать сторонние "приблуды" чтобы все собиралось отрабатывалось и собиралось в одном месте с минимальным вмешательством человека..
Как вариант сделать временную таблицу, куда передать все данные выборки и по номеру по порядку выдергивать данные частями какими хочешь
"Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
Цитата ^D^ima @

как сделать "врукопашную" я понимаю, нужна автоматизация процесса.
Возможно я не понял предложенного, тогда прошу развернуть идею
Цитата Орт_ИКС @
нужна автоматизация процесса

Ну так всё автоматизируется в рамках одного скрипта. Скажем, VBS.
Сначала стартует клиент командной строки (bcp), которому скармливается запрос на выгрузку. Он выполняет запрос и копирует нужные записи в файл с заданным именем в заданном каталоге. По завершении работы клиента скрипт рубит этот файл на нужные куски. В принципе всё укладывается в десяток строк кода. Оператору достаточно запустить скрипт (а если надо - то можно это поручить планировщику, и тогда вмешательство человека будет не то что минимальным - вообще нулевым), дождаться окончания его работы, и дальше делать с требуемым пакетом файлов, что ему нужно.

PS. И обратите серьёзное внимание на то, что сортировка, в которой все отбираемые записи уникальны - необходима. Без неё в выходной файл попадёт заданное число случайных записей из всех, которые отвечают требованиям (условиям отбора в запросе). Конечно, это не актуально и не требуется, если количество отбираемых записей заведомо меньше заданного количества, и TOP 1000000 туда засунут чисто "от фонаря".
Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
Есть претензии ко мне как к участнику? да ради бога.
Не нравятся мои ответы? не читайте их.
В общем, берегите себя. Нервные клетки не восстанавливаются.
Цитата Akina @

Примерно так я и делаю.
Создаю таблицу только уникальных записей,
Маркирую из этой таблицы тор 100м записей ключом i.
Отмаркированные записи выгружаю в файл.
увеличиваю ключ, маркирую следующие 100м и так по циклу пока все записи не будут отмаркированы
А смысл? всё равно в итоге выгружаются все записи. Тогда пофиг, есть сортировка или нет её, если порядок записей в кусках неважен.
В описанном мной варианте можно сразу выгружать все, сколько есть, сто тыщ мильёнов записей, без всех этих заморочек с маркированием. Всё одно на следующем этапе оно на куски порежется. Да, при этом нужен двойной объём дискового пространства, но с местом, как я понимаю, проблем нет.
Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
Есть претензии ко мне как к участнику? да ради бога.
Не нравятся мои ответы? не читайте их.
В общем, берегите себя. Нервные клетки не восстанавливаются.
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,0996 ]   [ 20 queries used ]   [ Generated: 18.03.19, 17:48 GMT ]