Запись данных в текстовый файл с использованием запросов BCP для типа хранилища файлов

Я копирую данные из SQL в текстовый файл с помощью инструмента bcp со следующей командой:

    bcp.exe "exec <StoredProcedure>" queryout "temp.txt" -T -r\n -c

Эта команда работает, как и ожидалось, в тестовой среде и создает/обновляет требуемый файл без дополнительных запросов.

Но когда он запускается в среде клиента, bcp дополнительно запрашивает длину поля, префикс и терминатор поля, поэтому, когда команда запускается из задания агента SQL, она застревает в бесконечном ожидании.

Любые идеи, почему это происходит?

На основе документации bcp, когда - используется параметр c - он не должен запрашивать тип и т. д. и должен использовать char в качестве типа хранения без префикса и \t в качестве признака конца поля.


person Maria Topchian    schedule 31.08.2015    source источник
comment
Я бы предположил, что где-то между вашей тестовой средой и реальным выполнением команды клиентской средой команда /n каким-то образом превращается в настоящую новую строку. Попробуйте поставить -c перед -r и посмотрите, что получится.   -  person RBarryYoung    schedule 31.08.2015
comment
-r\n является избыточным -c означает то же, что и -t\t -r\r\n, поэтому используйте либо тот, либо другой   -  person Jasper Schellingerhout    schedule 01.09.2015
comment
@RBarryYoung, ваша догадка оказалась верной, она решила проблему. Спасибо. Было бы хорошо, если бы вы переместили свой комментарий в ответ, чтобы я мог его принять.   -  person Maria Topchian    schedule 02.09.2015
comment
@Jasper Schellingerhout, это действительно излишне, спасибо за подсказку.   -  person Maria Topchian    schedule 02.09.2015


Ответы (2)


Я бы предположил, что где-то между вашей тестовой средой и реальным выполнением команды в клиентской среде "/n" превращается в настоящую новую строку. Попробуйте поставить "-c" перед "-r" и посмотрите, что получится.

person RBarryYoung    schedule 02.09.2015

Нет необходимости указывать разделитель записи, поэтому удалите -r\n. Параметр -c будет использовать табуляцию для столбцов и возврат каретки и перевод строки для записей (так же, как указание -t\t -r\r\n). В противном случае, как указано в другом плакате, сначала убедитесь, что -c указан

Примечание: я рекомендую в качестве практики (а не решения) выводить файл форматирования с помощью -f"yourpathandfilename.fmt". На стороне клиента вы также используете параметр -f с импортом. Таким образом, если есть разница между источником и целью, вы можете вручную настроить файл формата.

person Jasper Schellingerhout    schedule 02.09.2015