sql >> Base de Datos >  >> RDS >> Sqlserver

Archivo dañado de exportación de SQL Server BCP?

Gracias a Dios, gracias a la respuesta de @user_0 y la respuesta y el comentario crípticos de @user3494351 y esta antigua publicación en el foro. Finalmente descubrí esto después de varias horas de golpearme la cabeza contra la pared.

El problema es que a BCP le gusta agregar 8 bytes adicionales al archivo de manera predeterminada. Esto corrompe el archivo y hace que no se pueda abrir si solo usa el indicador nativo -n.

Sin embargo, BCP le permite especificar un archivo de formato como salida que le permite indicarle que no agregue los 8 bytes adicionales. Así que tengo una tabla que creé (para usar en un cursor) en SQL Server que solo tiene UNA FILA y UNA COLUMNA con mis datos binarios. La tabla debe existir cuando ejecuta el primer comando.

En la línea de comandos, primero debe hacer esto:

bcp MyDatabase.MySchema.MyTempTable format nul -T -n -f formatfile.fmt

Esto crea formatfile.fmt en el directorio en el que se encuentra. Lo hice en la unidad E:\. Así es como se ve:

10.0
1
1       SQLBINARY           8       0       ""   1     MyColumn             ""

Ese 8 ahí mismo es la variable que bcp dice cuántos bytes agregar a su archivo. Es el bastardo que está corrompiendo tus archivos. Cambia ese tonto a un 0:

10.0
1
1       SQLBINARY           0       0       ""   1     MyColumn             ""

Ahora simplemente ejecute su script BCP, suelte el indicador -n e incluya el indicador -f:

bcp "SELECT MyColumn FROM MyDatabase.MySchema.MyTempTable" queryout "E:\MyOutputpath" -T -f E:\formatfile.fmt