Побег BCP \ n в данных - PullRequest
       59

Побег BCP \ n в данных

0 голосов
/ 28 марта 2020

Я использую BCP для загрузки данных с сервера SQL, используя опцию запроса.

Однако я заметил, что если содержимое данных в каких-либо столбцах содержит '\ n', содержимое, экспортированное из BCP, будет обрабатываться как перевод строки.

Например, если данные в SQL Сервер:

COLUMN_1 COLUMN_2
AAA NAME\nSURNAME
BBB NAMESURNAME

Экспортируемый файл будет выглядеть следующим образом:

AAA NAME
SURNAME
BBB NAMESURNAME

Как я понимаю, см. Документ BCP, - c не должен трактовать \ n как символ новой строки.

- c Выполняет операцию с использованием символьного типа данных. Эта опция не запрашивает для каждого поля; он использует char в качестве типа хранилища, без префиксов и с \ t (символ табуляции) в качестве разделителя полей и \ r \ n (символ новой строки) в качестве разделителя строки. - c не совместим с -w.

Я не уверен, что я неправильно понял.

Вот команда, которую я использую:

bcp "select [col_name] from [table_name] where [condition]" queryout test.dat -U[username] -P[password] -S[serverip.port] -c

Спасибо.

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Если ваши данные содержат символы новой строки или контрольные символы, то эти символы, естественно, будут включены в копируемые данные.

Предполагается ли наличие контрольных символов? Если это так, то оставьте их, и они будут импортированы в любой пункт назначения. Тот факт, что ваше текстовое представление показывает «ломаную» строку, не означает, что SQL Сервер не может снова проглотить эту строку и сохранить контрольный символ в данных (опять же, если эти контрольные символы принадлежат там ... я видел множество случаев, когда они будут).

Если символ новой строки "\ n" (или любой другой управляющий символ в этом отношении) НЕ желателен, то это просто вопрос того, что вы прокомментировали в ответе Мартина. Просто очистите данные либо до того, как вы их запросите («обновить»), либо во время запроса (как вы прокомментировали «выбрать / заменить»), либо после того, как вы скопировали данные.

Я использовал »файл более «чистые» приложения в прошлом, чтобы «очистить» файл от нежелательных символов (это может быть проблемой с долгоживущими данными или данными, которые проходили через различные платформы или были затронуты людьми !!! Тьфу!).

1 голос
/ 28 марта 2020

Я полагаю, что ваш текст включает в себя фактический \n управляющий символ, а не просто символы \ и n рядом друг с другом?

Если это существует, то вы можете использовать собственный mode или измените терминатор строки, чтобы он отличался от \n, чтобы он распознавал правильный шаблон.

Я бы предложил использовать собственный режим и проверить, правильно ли он повторно импортирует данные с помощью \n на месте.

...