sql-server file export bcp corrupt

SQL Server BCP exportar archivo dañado?



sql-server file (3)

Tengo un pequeño problema con la funcionalidad BCP en SQL Server 2012. El problema es: estoy cargando una imagen .jpg (167 KB de tamaño) con el siguiente comando:

INSERTAR [tabela_testowa] (Datos) SELECCIONAR * DESDE OPENROWSET (BULK N''C: / foty / ch6_MagicShop.jpg '', SINGLE_BLOB) a;

y luego estoy tratando de exportarlo nuevamente al disco usando:

BCP "SELECCIONAR datos DE tabela_testowa DONDE ID = 1" consulta "C: / test / file.jpg" -T -n -d prueba

El archivo se guarda en el disco sin problemas, el tamaño también es de 167 KB pero ... no se puede abrir como la copia original. No sé si algún parámetro está mal en la exportación BCP. ¿O tal vez se corrompe en la etapa de importación? ¿Alguien tuvo problemas similares?


BCP está agregando información a su archivo. Solo unos pocos datos, pero no está exportando solo un archivo jpg.

Dices 167 KB, pero observa los bytes reales, no la dimensión redondeada. Habrá una diferencia

No puede exportar la imagen a través de BCP.


Gracias a Dios, gracias a @ user_0 answer y a la críptica respuesta y comentario de @ user3494351 y a esta antigua publicación en el foro . Finalmente lo descubrí 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 la bandera nativa -n.

Sin embargo, BCP le permite especificar un archivo de formato como salida que puede permitirle decirle 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 comando 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 E: / drive. Así es como se ve:

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

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

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

Ahora solo 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


OK, así que resolví el problema. El archivo de formato debe agregarse usando -f y la ruta al archivo. Se puede crear ejecutando bcp sin ningún formato y ordenar que guarde el archivo de formato en el disco. Entonces podemos usar este archivo de formato para que ya no sea necesario responder esas preguntas, y el archivo en sí no tiene datos adicionales y se puede abrir sin problemas