viernes, 12 de febrero de 2016

58. BCP (BulkCopy) Unicode en SQL Server(Ayuda Rápida XVIII)

Últimamente he estado hablando de muchos temas de SQL, no he olvidado los de C#, todavía debemos continuar con los patrones de diseño, y con los cambios que nos ha traído la nueva versión del lenguaje, pero como lo he mencionado anteriormente, un desarrollador completo debe conocer varios aspectos del entorno en el que se mueve.

El bulkcopy y el bulk insert son herramientas muy útiles por que nos permiten la rápida carga y descarga de datos, bulk insert es mucho mas flexible, y se puede considerar una evolución de Bulkcopy, hablemos hoy de bulkcopy.

Bulkcopy nos permite extraer a un archivo desde una ventana de comando toda la información o parte de ella de una tabla de SQL, de una manera muy rápida, pero ojo, la velocidad tiene un precio, Bulkcopy provoca bloqueos en la base de datos.

Así podemos extraer la información con una instrucción como esta:

bcp [Query] queryout [ruta] -S [Servidor] -T -d [Base_de_datos] -c -C ACP

que le estamos diciendo a la base que efectue un bulk copy de un query, esto lo copie a una ruta de salida, -S le indica cual es el nombre del servidor -T indica que no usara pasword, - d indica el catalogo -c indica el tipo de datos a usar en el archivo de texto - C ACP, este es el caso por el que escribimos este post, nos especifica la codificacion para que se guarden los datos que se encuentran en unicode de manera correcta.

¿Por que nos interesa esto?

Bueno el problema que se genera es que cuando usamos un tipo de dato como nvarchar, almacenamos la información en unicode, es decir tenemos un tamaño de palabra mayor que nos permite almacenar una mayor cantidad de símbolos, la version 5.1 de unicode permite alrededor de 100 000 símbolos, si no especificamos el formato, un símbolo se trata de representar por su equivalente en otro formato, como consecuencia el documento se corrompe.

En el caso del idioma español esto nos pasa con la ñ, los acentos que son propios de nuestro idioma.

Ahora si tenemos un archivo ¿Como podemos hacer el proceso contrario y subirlo a la base de datos?

La instrucción es muy similar

bcp [tabla] in [Archivo] -S [Servidor] -d [base de datos] -T -c -E -C ACP

que dice la instrucción, la instrucción anterior dice lo siguiente, inserta en la tabla, el contenido del archivo, -S nos indica el servidor de base de datos -d la base de datos -T que no pedirá password -c que los campos son caracteres -E como es una inserción le decimos que puede insertar columnas tipo identity -C ACP indica la codificación.

Es muy importante que si los datos se extraen con una codificación estos se importen con la misma codificación.


Felices lineas

No hay comentarios.:

Publicar un comentario