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

Модераторы: Akina
  
> Выгрузка из 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 -
        Akina, 100000000 это очень скромная часть. База "весит" десятки гигов. Потому и не хочу привлекать сторонние "приблуды" чтобы все собиралось отрабатывалось и собиралось в одном месте с минимальным вмешательством человека..
          Как вариант сделать временную таблицу, куда передать все данные выборки и по номеру по порядку выдергивать данные частями какими хочешь
            Цитата ^D^ima @

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

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

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

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


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0316 ]   [ 16 queries used ]   [ Generated: 28.03.24, 19:39 GMT ]