Слава богу, благодарение на отговора на @user_0 и загадъчния отговор и коментар на @user3494351 и тази древна публикация във форума, най-накрая разбрах това след няколко часа блъскане с глава в стената.
Проблемът е, че BCP обича да добавя допълнителни 8 байта към файла по подразбиране. Това поврежда файла и го прави невъзможен за отваряне, ако просто използвате нативния флаг -n.
Въпреки това, BCP ви позволява да посочите файл с формат като изход, който може да ви позволи да му кажете да не добавя допълнителните 8 байта. Така че имам таблица, която създадох (да се използва в курсор) в SQL Server, която има само ЕДИН РЕД и ЕДНА КОЛОНА с моите двоични данни. Таблицата трябва да съществува, когато изпълните първата команда.
В командния ред първо трябва да направите това:
bcp MyDatabase.MySchema.MyTempTable format nul -T -n -f formatfile.fmt
Това създава formatfile.fmt в директорията, в която се намирате. Направих на E:\ устройство. Ето как изглежда:
10.0
1
1 SQLBINARY 8 0 "" 1 MyColumn ""
Това 8 точно там е променливата, която bcp казва колко байта да добавите към вашия файл. Това е копелето, което поврежда вашите файлове. Променете този смукател на 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