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

Откуда:
Сообщений: 11
Добрый день !

MS SQL 2005

Имеется txt файл, который необходимо загрузить во временную таблицу. Но он не совсем стандартный. Дело в том, что в нем разное количество столбцов.
Пример:

1;2;3;4;5;6
1;2;3;4;5;6;7;8;9;10
1;2;3;4;5;6;7;8;9;10
1;2;3;4;5;6;7;8;9;10
1;2;3;4;5;6;7;8;9;10
1;2;3;4;5;6;7;8;9;10

Разделитель использую ';'.

использую скрипт:

create table #t (
c1 varchar(100)
, c2 varchar(100)
, c3 varchar(100)
, c4 varchar(100)
, c5 varchar(100)
, c6 varchar(100)
, c7 varchar(100)
, c8 varchar(100)
, c9 varchar(100)
, c10 varchar(100)
)

BULK INSERT #t
FROM 'c:\rep.txt'
WITH
(
FIELDTERMINATOR = ';'
,ROWTERMINATOR = '\n'
)

но вот результат немного не тот, который необходим, в первую строку попадают данные из второй строки.

c1 c2 c3 c4 c5 c6 c7 c8 c9 c10
1 2 3 4 5 6 1 2 3 4 5;6;7;8;9;10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10


т.е. получается, что первая стока к сожалению имеет меньшее кол-во разделителей, и загрузка тоже начинает кривить.


редактировать txt файл,- не вариант.

Помогите плиз, второй день бьюсь, как решить, пока ни как не придумаю. Заранее огромное пасибо!
30 май 13, 16:08    [14371227]     Ответить | Цитировать Сообщить модератору
 Re: bulk insert  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vitaliy_79
Но он не совсем стандартный. Дело в том, что в нем разное количество столбцов.

Ничего не выйдет с bulk insert
30 май 13, 16:10    [14371237]     Ответить | Цитировать Сообщить модератору
 Re: bulk insert  [new]
Vitaliy_79
Member

Откуда:
Сообщений: 11
Glory,

может быть порекомендуете, чем можно воспользоваться.

спасибо.
30 май 13, 16:18    [14371298]     Ответить | Цитировать Сообщить модератору
 Re: bulk insert  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vitaliy_79
может быть порекомендуете, чем можно воспользоваться.

Свой парсер
30 май 13, 16:19    [14371304]     Ответить | Цитировать Сообщить модератору
 Re: bulk insert  [new]
mike909
Member

Откуда:
Сообщений: 662
Vitaliy_79
Glory,

может быть порекомендуете, чем можно воспользоваться.

спасибо.

FORMATFILE с минимальным набором полей + последнее поле парсить вручную.
Можно и на лету через openrowset(bulk 'csvFileName', FORMATFILE = 'FormatFile.xml')
30 май 13, 16:25    [14371352]     Ответить | Цитировать Сообщить модератору
 Re: bulk insert  [new]
Vitaliy_79
Member

Откуда:
Сообщений: 11
по совету, через openrowset пытаюсь сделать:

пример, с меньшим количеством столбцов и строк сделал.
в 1-ой строке один столбец,во 2-ой и 3-ей строке два столбца.

data.txt
11
12;22
13;23


form.frm
9.0
2
1 SQLCHAR 0 25 ";" 1 c1 Cyrillic_General_CI_AS
2 SQLCHAR 0 25 "\r\n" 2 c2 Cyrillic_General_CI_AS


запрос такой:

SELECT a.* FROM OPENROWSET(BULK '\\diasoft\common\avt\123\1.txt'
,FORMATFILE= '\\diasoft\common\avt\123\2.txt') a


результат также получается не правильный:

c1            c2
11 12	      22
13	      23


видимо что-то необходимо в файл формат добавить, чтобы 1-ую строку понимал как с одним столбцом.

заранее спасибо.
30 май 13, 17:53    [14371932]     Ответить | Цитировать Сообщить модератору
 Re: bulk insert  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vitaliy_79
пример, с меньшим количеством столбцов и строк сделал.
в 1-ой строке один столбец,во 2-ой и 3-ей строке два столбца.

data.txt
11
12;22
13;23

Этот пример как раз должен грузить все в одно поле
Потому что число полей определяется по строке файла с _наименьшим_ числом столбцов
30 май 13, 17:56    [14371957]     Ответить | Цитировать Сообщить модератору
 Re: bulk insert  [new]
mike909
Member

Откуда:
Сообщений: 662
Vitaliy_79,

Я не совсем точно выразился
mike909
FORMATFILE с минимальным набором полей + последнее поле парсить вручную.

означает для Вашего примера
Vitaliy_79
Пример:

1;2;3;4;5;6
1;2;3;4;5;6;7;8;9;10

шесть полей, где последнее 6_е поле нужно парсить вручную.

А вы пытаетесь с одним полем играться.
Тогда уж проще bulk insert во временную таблицу из одного поля и над ней уже колдовать...
30 май 13, 18:10    [14372027]     Ответить | Цитировать Сообщить модератору
 Re: bulk insert  [new]
Vitaliy_79
Member

Откуда:
Сообщений: 11
всем спасибо, усе получилось.

по рекомендации форумчан так и сделал. сделал изначально шесть столбцов, последний столбец разбивал уже руками.
13 июн 13, 15:21    [14429034]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить