Получение bcp.exe чтобы избежать терминаторов
-
21-09-2019 - |
Вопрос
Мне нужно экспортировать некоторые данные с помощью утилиты BCP SQL Server 2000.Иногда мои данные содержат символы, такие как и , которые мне нужно использовать в качестве ограничителей столбцов и строк.Как мне заставить BCP экранировать символы, которые он использует в качестве терминаторов при выводе данных, чтобы я мог фактически импортировать данные в другую программу?
Например, один из моих столбцов представляет собой текстовые данные и включает вкладки и новые строки.BCP просто экспортирует их как есть, и программа, с помощью которой я пытаюсь их импортировать, запутывается, потому что данные заканчиваются в середине строки и / или строка содержит дополнительные столбцы без видимой причины.
Это кажется очень, очень, очень базовая функция для включения в экспортер данных, но ни одна из параметры командной строки кажется, упоминал об этом.(Почему это не было бы просто значением по умолчанию, выше моего понимания.) Я что-то упускаю?
Решение
У вас не может быть данных, содержащих вкладки и новые строки, с разделителями табуляции и новой строки.В этом нет никакого смысла.Экранирование не помогло бы, потому что вкладка есть вкладка.Мы здесь не говорим об обработке строк на c #.
Что бы я сделал, так это использовал разные терминаторы такие , как |
и ||/n
, или использовать форматировать файл
Другие советы
Полностью согласен с вами:побег должен быть одним из вариантов."У вас не может быть данных с помощью табуляций или новых строк" - это самая глупая вещь, которую я когда-либо слышал.
Вот возможное решение:
- используйте опцию -r, чтобы установить другой ограничитель строки.Что - то
маловероятно, что они будут присутствовать в ваших данных (#!#$#%#).Я думаю, вы можете использовать несколько
персонажи, так что это облегчает задачу. - Откройте свой файл данных в sed, удобном текстовом редакторе, или напишите скрипт - и замените любые символы и их экранированными эквивалентами (\ и \ ).Наконец, замените свой ограничитель строки на \ n, и у вас все должно получиться.
- Я думаю, что то же самое должно применяться к использованию -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://msdn.microsoft.com/en-us/library/aa173859%28SQL.80%29.aspx
Как правило, я могу предложить эти ссылки, чтобы вы узнали о проблемах BCP и решениях:http://groups.google.co.uk/groups ?q=lindawie+формат+ файл
С наилучшими пожеланиями