Pregunta

Lo siento si esta pregunta se ha hecho ya, pero no pude encontrar en cualquier lugar. Tengo una tabla que almacena los archivos como BLOB. La columna que contiene el archivo es un tipo de datos de imagen. Me gustaría ser capaz de extraer los datos binarios de la columna y convertirlo en un archivo real. Yo lo ideal sería ser capaz de hacer esto con el BCP o la gestión del estudio, si es posible.

He tratado BCP, pero por alguna razón cuando intento y saco un documento de Office Word piensa que es corrupto. Esto es lo que he probado hasta ahora (obviamente los valores han sido cambiados para proteger a los inocentes:):

bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -n -S server -U username -P password

Esto no está funcionando, aunque? ¿Alguna idea?

Editar Resulta que no es necesario la bandera nativa -n. Además, el BCP intenta incluir un prefijo de 4 bytes por defecto en la columna de la imagen -. Que realmente quiere este conjunto a 0

bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -S server -U username -P password
Enter the file storage type of field document_binary [image]:
Enter prefix-length of field document_binary [4]: 0
Enter length of field document_binary [0]:
Enter field terminator [none]:
¿Fue útil?

Solución

Estoy respondiendo a mi propia pregunta desde que estoy molesto con SO diciéndome que configurar una recompensa

Resulta que no es necesario la bandera nativa -n. Además, el BCP intenta incluir un prefijo de 4 bytes por defecto en la columna de la imagen -. Que realmente quiere este conjunto a 0

bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -S server -U username -P password
Enter the file storage type of field document_binary [image]:
Enter prefix-length of field document_binary [4]: 0
Enter length of field document_binary [0]:
Enter field terminator [none]:

Otros consejos

Si puede utilizar el código C # / .NET para hacer esto, el siguiente artículo KB puede ser útil:

http://support.microsoft.com/kb/317016

Al parecer, usted puede hacer algo como esto con BCP y un archivo de formato, pero IIRC el archivo de formato tiene que ser pre-pobladas con el número exacto de bytes que está esperando para tirar de la columna, lo que hace que sea poco práctico.

Otra opción que puede optar es utilizar FILESTREAM en 2008 o, si usted no está planeando migrar a 2008 en el corto plazo, almacenar los documentos en el sistema de archivos y un puntero a ellos en la base de datos. Sí hay pros y contras a esto, pero es la forma en que hemos elegido en todos los proyectos hasta la fecha.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top