Вопрос

Мне нужно экспортировать некоторые данные с помощью утилиты BCP SQL Server 2000.Иногда мои данные содержат символы, такие как и , которые мне нужно использовать в качестве ограничителей столбцов и строк.Как мне заставить BCP экранировать символы, которые он использует в качестве терминаторов при выводе данных, чтобы я мог фактически импортировать данные в другую программу?

Например, один из моих столбцов представляет собой текстовые данные и включает вкладки и новые строки.BCP просто экспортирует их как есть, и программа, с помощью которой я пытаюсь их импортировать, запутывается, потому что данные заканчиваются в середине строки и / или строка содержит дополнительные столбцы без видимой причины.

Это кажется очень, очень, очень базовая функция для включения в экспортер данных, но ни одна из параметры командной строки кажется, упоминал об этом.(Почему это не было бы просто значением по умолчанию, выше моего понимания.) Я что-то упускаю?

Это было полезно?

Решение

У вас не может быть данных, содержащих вкладки и новые строки, с разделителями табуляции и новой строки.В этом нет никакого смысла.Экранирование не помогло бы, потому что вкладка есть вкладка.Мы здесь не говорим об обработке строк на c #.

Что бы я сделал, так это использовал разные терминаторы такие , как | и ||/n, или использовать форматировать файл

Другие советы

Полностью согласен с вами:побег должен быть одним из вариантов."У вас не может быть данных с помощью табуляций или новых строк" - это самая глупая вещь, которую я когда-либо слышал.

Вот возможное решение:

  1. используйте опцию -r, чтобы установить другой ограничитель строки.Что - то
    маловероятно, что они будут присутствовать в ваших данных (#!#$#%#).Я думаю, вы можете использовать несколько
    персонажи, так что это облегчает задачу.
  2. Откройте свой файл данных в sed, удобном текстовом редакторе, или напишите скрипт - и замените любые символы и их экранированными эквивалентами (\ и \ ).Наконец, замените свой ограничитель строки на \ n, и у вас все должно получиться.
  3. Я думаю, что то же самое должно применяться к использованию -t для полевых терминаторов

Взгляните на эта статья для получения дополнительной информации.

Вы можете использовать разделитель, состоящий из нескольких символов, если заключите их в двойные кавычки:

bcp MY_TABLE out C:\MY_FILE.txt -S SERVER_IP -d DB_NAME -U MY_USER -P MY_PASSWORD -w -t "&#)^@" -r ">~+!"

Найдено решение здесь.

У меня такая же проблема, и я долго искал решение.Я нашел это у мастера BCP, и это звучит разумно.Возможно, вы тоже хотите попробовать это.

Возможное решение: http://groups.google.co.uk/group/microsoft.public.sqlserver.tools/tree/browse_frm/thread/f1ee12cba3079189/ef9094123901fe26?rnum=1&q=lindawie+format+file&_done=%2Fgroup%2Fmicrosoft.public.sqlserver.tools%2Fbrowse_frm%2Fthread%2Ff1ee12cba3079189%2Fef9094123901fe26%3Ftvc%3D1%26q%3Dlindawie%2Bformat%2Bfile%26#doc_fa5708ca51d967a6

Детали файла формата и дизайн:http://msdn.microsoft.com/en-us/library/aa173859%28SQL.80%29.aspx

Как правило, я могу предложить эти ссылки, чтобы вы узнали о проблемах BCP и решениях:http://groups.google.co.uk/groups ?q=lindawie+формат+ файл

С наилучшими пожеланиями

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top