Слава богу, благодаря @ user_0 answer и загадочному ответу и комментарию @ user3494351 и комментарию, и этот древний пост форума Я, наконец, понял это через несколько часов, ударяя головой о стену.
Проблема в том, что BCP любит добавлять дополнительные 8 байтов в файл по умолчанию. Это искажает файл и делает невозможным его открытие, если вы просто используете флаг native -n.
Однако BCP позволяет вам указать файл формата в качестве вывода, который может позволить вам сказать, чтобы он не добавлял дополнительные 8 байт. Таким образом, у меня есть таблица, которую я создал (которая будет использоваться в курсоре) на SQL Server, которая имеет только ОДИН ROW и ONE COLUMN с моими двоичными данными. Таблица должна существовать при запуске первой команды.
В командной строке сначала вам нужно сделать это:
bcp MyDatabase.MySchema.MyTempTable format nul -T -n -f formatfile.fmt
Это создает formatfile.fmt в каталоге, в котором вы находитесь. I сделал на диске E: \. Вот как это выглядит:
10.0
1
1 SQLBINARY 8 0 "" 1 MyColumn ""
Это 8, там есть переменная, которая указывает, сколько байтов добавить в ваш файл. Это ублюдок, который развращает ваши файлы. Измените этот присосок на 0:
10.0
1
1 SQLBINARY 0 0 "" 1 MyColumn ""
Теперь просто запустите свой BCP-скрипт, снимите флаг -n и включите флаг -f:
bcp "SELECT MyColumn FROM MyDatabase.MySchema.MyTempTable" queryout "E:\MyOutputpath" -T -f E:\formatfile.fmt