Во-первых, программа BCP распознает только двойную кавычку как контейнер разделителя. Таким образом, использование одинарных кавычек приводит к ошибке.
Во-вторых, поскольку в качестве разделителя вы хотите указать «|» включает в себя символ двойной кавычки, который BCP требует от вас использовать для включения вашего разделителя, вы должны использовать escape-символ, чтобы программа BCP игнорировала кавычки, которые вы хотите использовать в качестве разделителей. Экранирующий символ - это символ обратной косой черты. Итак ...
Вместо "|" ... используйте ... "\" | \ ""
Это скажет BCP игнорировать двойные кавычки, начинающиеся с обратной косой черты, и обрабатывать их как любой другой символ.
В-третьих, вы должны указать первое поле, которое имеет двойную кавычку. "|" терминатор, о котором я упоминал выше, не учитывает открывающую двойную кавычку в начале каждой строки для первого поля.
Чтобы справиться с этим, вы должны добавить в файл формата «фиктивное» поле и назначить его терминатор как \ "(или фактически" \ "" в файле формата). Затем, поскольку у вас теперь есть еще одно поле в файле, чем в таблице, вы должны сместить нумерацию столбцов, чтобы BCP пропустил это новое поле, которое заканчивается первой двойной кавычкой в файле
Последнее, последнее поле не заканчивается только символом новой строки "\ n". Это также называется двойной кавычкой (без символа трубы). Итак, мы должны настроить конечный терминатор поля (который на самом деле является терминатором строки / строки). Вот так "\" \ n ".
Ваш файл формата теперь будет выглядеть так:
14.0
5
1 SQLCHAR 0 0 "\"" 0 dummy_field ""
2 SQLCHAR 0 0 "\"|\"" 1 ID ""
3 SQLCHAR 0 0 "\"|\"" 2 SUB_ID ""
4 SQLCHAR 0 0 "\"|\"" 3 CODE1 SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 0 0 "\"|\"" 4 CODE2 ""
6 SQLCHAR 0 0 "\"\n" 5 DATE ""
Надеюсь, это поможет.