Dzięki Bogu, dzięki odpowiedzi @user_0 i tajemniczej odpowiedzi i komentarzowi @user3494351 oraz temu starożytnemu postowi na forum, w końcu zrozumiałem to po kilku godzinach uderzania głową w ścianę.
Problem polega na tym, że BCP lubi domyślnie dodawać dodatkowe 8 bajtów do pliku. Powoduje to uszkodzenie pliku i uniemożliwia jego otwarcie, jeśli użyjesz tylko natywnej flagi -n.
Jednak BCP pozwala określić plik formatu jako wynik, który może pozwolić mu powiedzieć, aby nie dodawał dodatkowych 8 bajtów. Mam więc tabelę, którą utworzyłem (do użycia w kursorze) w SQL Server, która ma tylko JEDEN WIERSZ i JEDNĄ KOLUMNĘ z moimi danymi binarnymi. Tabela musi istnieć po uruchomieniu pierwszego polecenia.
Najpierw w wierszu poleceń musisz to zrobić:
bcp MyDatabase.MySchema.MyTempTable format nul -T -n -f formatfile.fmt
Spowoduje to utworzenie pliku formatfile.fmt w katalogu, w którym się znajdujesz. Zrobiłem na dysku E:\. Oto jak to wygląda:
10.0
1
1 SQLBINARY 8 0 "" 1 MyColumn ""
To 8 jest zmienną, która bcp mówi, ile bajtów należy dodać do pliku. To drań psuje twoje pliki. Zmień tego frajera na 0:
10.0
1
1 SQLBINARY 0 0 "" 1 MyColumn ""
Teraz po prostu uruchom skrypt BCP, usuń flagę -n i dołącz flagę -f:
bcp "SELECT MyColumn FROM MyDatabase.MySchema.MyTempTable" queryout "E:\MyOutputpath" -T -f E:\formatfile.fmt