Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Неоднородный набор данных для выгрузки в csv. Идеи.  [new]
evus
Member

Откуда: Москва
Сообщений: 208
Уважаемые коллеги,

столкнулся с проблемой, буду рад светлым идеям.
Постановка задачи:

Необходимо выгружать данные из БД в csv файлы для дальнейшего импорта в некоторую систему. Все было бы здорово, если бы не некоторые сложности в формате csv-файла - первая и последняя строка в нем должны содержать некоторую служебную информацию. Эти строки (первая и последняя) по количеству столбцов не равны основным данным, то есть файл имеет для примера такую структуру:

Иванов, 25-11-2009, 2009А56,
1,3,АБВ,Москва,15,1500,
2,5,АБВ,Саратов,15,400,
3,3,АБВ,Тверь,15,7600,
4,5,АБВ,Рязань,28,10,
EOF

Та часть, которая связана с выгрузкой табличных данных была реализована (с помощью bcp).
Думаю вот теперь что делать с первой и последней строками.
Есть идея делать простой union на уровне БД (с типами данных все нормально, везде строки), а потом удалять лишние запятые в итоговом файле средствами командной строки, но она мне очень не нравится. Возможно кто-то сталкивался с подобными затруднениями, буду рад светлым идеям)
19 июн 09, 18:25    [7322729]     Ответить | Цитировать Сообщить модератору
 Re: Неоднородный набор данных для выгрузки в csv. Идеи.  [new]
evus
Member

Откуда: Москва
Сообщений: 208
Up
22 июн 09, 10:27    [7326559]     Ответить | Цитировать Сообщить модератору
 Re: Неоднородный набор данных для выгрузки в csv. Идеи.  [new]
vov@
Member

Откуда: Днепропетровск
Сообщений: 110
а чем тебе не нравится union, нормальное решение
только не понятно, зачем удалять запятые?

у меня есть подобная задача, я в результирующей выборке получаю 1 колонку, а строки формирую силами SQL.

select 'Иванов' + ', ' + '25-11-2009' + ', ' + '2009А56' + ', '

select '1' + ', ' + '3' + ', ' + 'АБВ' + ', ' + 'Москва' + ', ' + '15' + ', ' + '1500' + ', '
......
select 'EOF'

типа так
22 июн 09, 11:03    [7326758]     Ответить | Цитировать Сообщить модератору
 Re: Неоднородный набор данных для выгрузки в csv. Идеи.  [new]
evus
Member

Откуда: Москва
Сообщений: 208
vov@,

Набор данных, между первой и последней строкой формируется не вручную, а при помощи выборки из таблицы. Если я не ошибаюсь, для операции union необходимо, чтобы количество столбцов объединяемых наборов было одинаковым, а добиться этого при ручном формировании, можно только введением фейковых пустых полей. При таком способе реализации получаются лишние поля при выгрузке в csv. Вот отсюда и берется необходимость удаления лишних запятых.
22 июн 09, 11:09    [7326796]     Ответить | Цитировать Сообщить модератору
 Re: Неоднородный набор данных для выгрузки в csv. Идеи.  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
в примере, который привел Вова, формируется 1 колонка, в которой присутствуют все поля, перечисленные через запятую.

для спящего время бодрствования равносильно сну
22 июн 09, 11:12    [7326819]     Ответить | Цитировать Сообщить модератору
 Re: Неоднородный набор данных для выгрузки в csv. Идеи.  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1141
evus
для дальнейшего импорта в некоторую систему.

А эта некая система не сможет прочитать файл такой структуры:
22 июн 09, 11:19    [7326882]     Ответить | Цитировать Сообщить модератору
 Re: Неоднородный набор данных для выгрузки в csv. Идеи.  [new]
evus
Member

Откуда: Москва
Сообщений: 208
Алексей2003,

А, да. Подпись Алексея видимо как раз для меня :) Чтож, вариант. Сейчас попробую.
22 июн 09, 11:19    [7326889]     Ответить | Цитировать Сообщить модератору
 Re: Неоднородный набор данных для выгрузки в csv. Идеи.  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1141
Иванов, 25-11-2009, 2009А56,1,3,АБВ,Москва,15,1500,
Иванов, 25-11-2009, 2009А56,2,5,АБВ,Саратов,15,400,
Иванов, 25-11-2009, 2009А56,3,3,АБВ,Тверь,15,7600,
Иванов, 25-11-2009, 2009А56,4,5,АБВ,Рязань,28,10,
Сори, случайно нажал "Опубликовать" :)
22 июн 09, 11:20    [7326891]     Ответить | Цитировать Сообщить модератору
 Re: Неоднородный набор данных для выгрузки в csv. Идеи.  [new]
vov@
Member

Откуда: Днепропетровск
Сообщений: 110
Да, при добавлении пустых полей у тебя будут запятые.
Я предлагаю не делать этих полей, а union ом соединять таблицы с 1 большой текстовой колонкой.
еще рекомендую использовать union all, что б не потерять данные.
22 июн 09, 11:21    [7326901]     Ответить | Цитировать Сообщить модератору
 Re: Неоднородный набор данных для выгрузки в csv. Идеи.  [new]
evus
Member

Откуда: Москва
Сообщений: 208
Saller,

нет, к сожалению не сможет. Ей очень нужны эти заголовки.
22 июн 09, 11:22    [7326910]     Ответить | Цитировать Сообщить модератору
 Re: Неоднородный набор данных для выгрузки в csv. Идеи.  [new]
evus
Member

Откуда: Москва
Сообщений: 208
vov@,

Да, понял, спасибо. Сейчас буду пробовать, а в конце дня постараюсь отписаться об успехах :)
22 июн 09, 11:23    [7326931]     Ответить | Цитировать Сообщить модератору
 Re: Неоднородный набор данных для выгрузки в csv. Идеи.  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
ЗЫ
bcp {[[database_name.][owner].]{table_name | view_name} | "query"}
{in | out | queryout | format} data_file
[-m max_errors] [-f format_file] [-e err_file]
[-F first_row] [-L last_row] [-b batch_size]
[-n] [-c] [-w] [-N] [-V (60 | 65 | 70)] [-6]
[-q] [-C code_page] [-t field_term] [-r row_term]
[-i input_file] [-o output_file] [-a packet_size]
[-S server_name[\instance_name]] [-U login_id] [-P password]
[-T] [-v] [-R] [-k] [-E] [-h "hint [,...n]"]

для спящего время бодрствования равносильно сну
22 июн 09, 16:14    [7329420]     Ответить | Цитировать Сообщить модератору
 Re: Неоднородный набор данных для выгрузки в csv. Идеи.  [new]
evus
Member

Откуда: Москва
Сообщений: 208
Уважаемые коллеги,

спасибо всем за участие в обсуждении и интересные идеи. Думаю, что все они имеют право на существование при легкой вариации условий задачи. В моем случае наиболее продходящим оказался вариант с применением функции copy :).

copy f1.csv /b +f2.csv /b +f3.csv /b fr.csv /y - решает.
22 июн 09, 17:08    [7329818]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить