Díky bohu, díky odpovědi @user_0 a záhadné odpovědi a komentáři @user3494351 a tomuto prastarému příspěvku na fóru jsem na to konečně přišel po několika hodinách mlácení hlavou o zeď.
Problém je v tom, že BCP ve výchozím nastavení rád přidává do souboru dalších 8 bajtů. To poškodí soubor a znemožňuje jej otevřít, pokud pouze použijete nativní příznak -n.
BCP vám však umožňuje zadat formátový soubor jako výstup, který vám umožní sdělit mu, aby nepřidával dalších 8 bajtů. Takže mám tabulku, kterou jsem vytvořil (pro použití v kurzoru) na SQL Server, která má pouze JEDEN ŘÁDEK a JEDEN SLOUPEK s mými binárními daty. Tabulka musí existovat, když spustíte první příkaz.
V příkazovém řádku nejprve musíte provést toto:
bcp MyDatabase.MySchema.MyTempTable format nul -T -n -f formatfile.fmt
Tím se vytvoří formatfile.fmt v adresáři, ve kterém se nacházíte. Udělal jsem to na jednotce E:\. Tady je to, jak to vypadá:
10.0
1
1 SQLBINARY 8 0 "" 1 MyColumn ""
Právě tam je proměnná bcp, která říká, kolik bajtů přidat do souboru. Je to ten bastard, který poškozuje vaše soubory. Změňte ten cucák na 0:
10.0
1
1 SQLBINARY 0 0 "" 1 MyColumn ""
Nyní stačí spustit skript BCP, zrušit parametr -n a zahrnout parametr -f:
bcp "SELECT MyColumn FROM MyDatabase.MySchema.MyTempTable" queryout "E:\MyOutputpath" -T -f E:\formatfile.fmt