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

Откуда:
Сообщений: 165
Привет всем,
никак не могу обработать табулированную переменную..
Переменная такого вида:
"E02549300QE3BN5Y1FE7M41","23144547","OTLW1001","Reporting Obligation Party 2 is required when reporting on behalf of both counterparties"
"E02549300QE3BN5Y1FE7M41","25712239","OTLW1001","Reporting Obligation Party 2 is required when reporting on behalf of both counterparties"
"E02549300QE3BN5Y1FE7M41","15878874","OTLW1001","Reporting Obligation Party 2 is required when reporting on behalf of both counterparties"


изначально она хранится в переменной varchar(max). Далее ее нужно распарсить, я решил сделать это переносом ее в таблицу, чтобы дальше было удобно работать.
Вставляю переменную в временную таблицу. Пробую сохранить файл на диск:
EXECUTE master.sys.xp_cmdshell 'bcp "SELECT string FROM ##t" queryout "c:\warn.tmp" -c -C20127 -t, -r\n '


И вот тут уже начинаются проблемы. Когда я использую команду:
BULK INSERT #warn FROM 'c:\warn.tmp' with (FIRSTROW = 1, FIELDTERMINATOR = '",', ROWTERMINATOR = '\r\n', DATAFILETYPE = 'char')

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

Подскажите пожалуйста, как это сделать.
Или, как вариант, может быть подскажете способ парсинга таких строк - нужны допустим 1,3,4 поля.

Спасибо.

MS SQL 2008
10 июл 14, 18:28    [16288807]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с BULK INSERT и табулированной переменной или нестандартный парсинг строк  [new]
whitebeast
Member

Откуда:
Сообщений: 165
попробовал заменить "," на символ табуляции - не помогло. Все равно не видит символов перехода строки...
10 июл 14, 18:36    [16288847]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с BULK INSERT и табулированной переменной или нестандартный парсинг строк  [new]
Glory
Member

Откуда:
Сообщений: 104751
whitebeast
то вставляется одна строка вместо трех.

А вы смотрели, что вы собственно получили в файле то ?
10 июл 14, 23:37    [16289615]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с BULK INSERT и табулированной переменной или нестандартный парсинг строк  [new]
whitebeast
Member

Откуда:
Сообщений: 165
Я привел выше копипасту из файла. Там где три строки текста
11 июл 14, 10:32    [16290426]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с BULK INSERT и табулированной переменной или нестандартный парсинг строк  [new]
Glory
Member

Откуда:
Сообщений: 104751
whitebeast
Я привел выше копипасту из файла.

Я вам привел фотографию больного - лечите.
11 июл 14, 10:33    [16290435]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с BULK INSERT и табулированной переменной или нестандартный парсинг строк  [new]
whitebeast
Member

Откуда:
Сообщений: 165
Файл в аттаче.
Так же пробовал менять настройки ROWTERMINATOR на '\r' и '\n' -> с тем же результатом...

К сообщению приложен файл (warn.tmp - 419bytes) cкачать
11 июл 14, 10:54    [16290603]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с BULK INSERT и табулированной переменной или нестандартный парсинг строк  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
да сами откройте го фаром ,потом ф4 и посмотрите какие реально символы у вас в конце строки стоят
11 июл 14, 10:55    [16290611]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с BULK INSERT и табулированной переменной или нестандартный парсинг строк  [new]
whitebeast
Member

Откуда:
Сообщений: 165
Давно это сделал. в конце каждой строки LF и в конце файла CRLF. Но все равно не понимаю как заставить его открывать нормально. Видимо придется покопать тему формат файлов.
11 июл 14, 11:00    [16290647]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с BULK INSERT и табулированной переменной или нестандартный парсинг строк  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Line Feed – LF – \n – 0x0a – 10 (decimal)
11 июл 14, 11:01    [16290655]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с BULK INSERT и табулированной переменной или нестандартный парсинг строк  [new]
whitebeast
Member

Откуда:
Сообщений: 165
Решил проблему заменой символа LF на CRLF:
DECLARE @x CHAR(2) = CHAR(13)+CHAR(10)
SELECT @str = REPLACE(@str,CHAR(10), @x)

и такие настройки сработали:
BULK INSERT #warn FROM 'c:\warn.tmp' with (FIRSTROW = 1, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', DATAFILETYPE = 'char')
11 июл 14, 11:17    [16290748]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить