BCP с пользовательскими разделителями столбцов и строк

#sql-server #bcp

#sql-сервер #bcp

Вопрос:

Мне нужна помощь с плоским файлом, предоставляемым нам третьей стороной, который использует:

 Field1[**]Field2[**]Field3[**]Field4[<>]Field1[**]Field2[**]Field3[**]Field4[<>]
  

как:

 Row1:Field1 Field2 Field3 Field4
Row2:Field1 Field2 Field3 Field4
  

в виде плоского файла. Я хочу иметь возможность импортировать плоский файл непосредственно в таблицу через BCP или Openrowset или массовую вставку с SSMS 17.5

Я предполагаю, что мне нужен файл формата, но я понятия не имею, как определить эти разделители! Квадратные скобки являются частью разделителя.

Моей единственной альтернативой является CLOB и Replace, но это двойная обработка..

Комментарии:

1. Извините, в спешке, это может вам помочь: mssqltips.com/sqlservertip/5345 /… (массовая вставка позволяет указать разделители строк и полей)

2. BCP также имеет параметры для указания row_term и field_term

3. Вам просто нужно указать ограничитель строки и поля для массовой вставки. Что-то вроде: BULK INSERT YourTable FROM 'C:someFileLocationfilename.txt' WITH ( FIELDTERMINATOR = '[**]', ROWTERMINATOR = '[<>]' ); . Не уверен, что BulkInsert будет жаловаться на эти разделители. @MatBailie первое сообщение — хороший способ справиться с этим

Ответ №1:

Спасибо всем

Не удалось увидеть дерево для деревьев.

 BULK INSERT [dbo].[My Table]
FROM 'F:Myfile.txt'
WITH (
      FIELDTERMINATOR = '[**]'
     ,ROWTERMINATOR = '[<>]'
     ,FIRSTROW=1
)
  

РЕШЕНО 🙂