Grazie a Dio, grazie alla risposta di @ user_0 e alla risposta e al commento criptici di @ user3494351 e a questo antico post sul forum, l'ho finalmente capito dopo diverse ore in cui ho sbattuto la testa contro il muro.
Il problema è che a BCP piace aggiungere altri 8 byte al file per impostazione predefinita. Questo danneggia il file e non può essere aperto se usi solo il flag -n nativo.
Tuttavia, BCP ti consente di specificare un file di formato come output che può consentirti di dirgli di non aggiungere gli 8 byte extra. Quindi ho una tabella che ho creato (da utilizzare in un cursore) in SQL Server che ha solo UNA RIGA e UNA COLONNA con i miei dati binari. La tabella deve esistere quando esegui il primo comando.
Nella riga di comando devi prima fare questo:
bcp MyDatabase.MySchema.MyTempTable format nul -T -n -f formatfile.fmt
Questo crea formatfile.fmt nella directory in cui ti trovi. L'ho fatto su E:\ drive. Ecco come appare:
10.0
1
1 SQLBINARY 8 0 "" 1 MyColumn ""
Quell'8 proprio lì è la variabile che bcp dice quanti byte aggiungere al tuo file. È il bastardo che sta corrompendo i tuoi file. Cambia quella ventosa in uno 0:
10.0
1
1 SQLBINARY 0 0 "" 1 MyColumn ""
Ora esegui il tuo script BCP, rilascia il flag -n e includi il flag -f:
bcp "SELECT MyColumn FROM MyDatabase.MySchema.MyTempTable" queryout "E:\MyOutputpath" -T -f E:\formatfile.fmt