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

Откуда:
Сообщений: 506
Здравствуйте.

Вопрос по загрузке данных из csv с использованием bulk insert

Есть csv с разделителем полей: |

field1|field2|field3
aaa|"bbb|ccc"|ddd
kkk|xxx|"yyy|zzz"

как загрузить данные в таблицу:

field1 field2 field3
-----------------------------
aaa bbb|ccc ddd
kkk xxx yyy|zzz

пробовал с файлом формата - не получилось
7 ноя 19, 14:33    [22011551]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из csv с разделителем | и двойными кавычками при помощи bulk insert  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4014
Турист,

Так давайте файл формата в студию и тексты ошибок
7 ноя 19, 15:00    [22011593]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из csv с разделителем | и двойными кавычками при помощи bulk insert  [new]
Турист
Member

Откуда:
Сообщений: 506
попытался такой файл формата

9.0
5
1       SQLCHAR       0       1        ""            0     ExtraField      ""
2       SQLCHAR       0       100     "\"|\""     1     field1             SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       100     "\"|\""     2     field2             SQL_Latin1_General_CP1_CI_AS
4       SQLCHAR       0       100     "\""         3    field3             SQL_Latin1_General_CP1_CI_AS
5       SQLCHAR       0       1       "\r\n"        0    ExtraField       ""


ошибка

The bulk load failed. The column is too long in the data file for row 1, column 2. Verify that the field terminator and row terminator are specified correctly.
Cannot obtain the required interface ("IID_IColumnsInfo") from OLE DB provider "BULK" for linked server "(null)".
7 ноя 19, 15:23    [22011610]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из csv с разделителем | и двойными кавычками при помощи bulk insert  [new]
aleks222
Member

Откуда:
Сообщений: 760
Турист
Есть csv с разделителем полей: |

field1|field2|field3
aaa|"bbb|ccc"|ddd
kkk|xxx|"yyy|zzz"

как загрузить данные в таблицу:

field1 field2 field3
-----------------------------
aaa bbb|ccc ddd
kkk xxx yyy|zzz


Этот бред BCP не переварит.
7 ноя 19, 20:29    [22011907]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из csv с разделителем | и двойными кавычками при помощи bulk insert  [new]
L_argo
Member

Откуда:
Сообщений: 1013
автор
Этот бред BCP не переварит.
А тут еще нет дат, бинари, БЛОБов и чисел с в произвольном формате. :)
МС давно оторвалась от нужд реального мира и витает где-то в индусских облаках.

пысы: не даром мой знакомый ушел из МС (Редмонт). Индусы нереально запарили. :)
7 ноя 19, 22:35    [22011959]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из csv с разделителем | и двойными кавычками при помощи bulk insert  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2940
Турист
Здравствуйте.

Вопрос по загрузке данных из csv с использованием bulk insert



BULK INSERT
   dbo.test
      FROM 'test.txt'
     WITH
    (
		FORMAT = 'CSV' 
		, FIELDTERMINATOR = '|' 
	)

	select * from dbo.test


field1field2field3
aaabbb|cccddd
kkkxxxyyy|zzz
8 ноя 19, 12:36    [22012239]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из csv с разделителем | и двойными кавычками при помощи bulk insert  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5963
Турист,

Замените вложенный разделитель,
c:\test>cat tourist.txt
a|b|"c|d"|e
f|g|h|"i|j"

c:\test> sed -r -e 's/"([^|]+)(\|)([^"]+)"/\1#DEADBEEF#\3/g' tourist.txt
a|b|c#DEADBEEF#d|e
f|g|h|i#DEADBEEF#j


Или грузите через визуальную приблуду Import adn Export Data Wizard, она этот формат сожрёт.
8 ноя 19, 12:38    [22012240]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из csv с разделителем | и двойными кавычками при помощи bulk insert  [new]
Турист
Member

Откуда:
Сообщений: 506
HandKot,
автор
FORMAT = 'CSV'


не пойдёт на sql server 2014
8 ноя 19, 13:57    [22012330]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из csv с разделителем | и двойными кавычками при помощи bulk insert  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4014
Турист,

SSIS пробовали?
11 ноя 19, 14:29    [22013591]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из csv с разделителем | и двойными кавычками при помощи bulk insert  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2940
Турист

не пойдёт на sql server 2014

Тогда выбор не такой и большой:
1. Обновится до 17
2. SSIS, правда не пробовал, но, видать, можно
3. Вставляйте сперва в один столбец, а потом сплите средствами SQL
13 ноя 19, 07:27    [22014943]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из csv с разделителем | и двойными кавычками при помощи bulk insert  [new]
a_voronin
Member

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

SSIS умеет это давно. Я делал переносы в районе 2011 года. Ни с какими скриптами морочиться не надо.
13 ноя 19, 15:22    [22015503]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить