Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

File danneggiato di esportazione BCP di SQL Server?

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