La verdad es que no había pensado en hacer una entrada sobre SSIS y la extracción a un XLS o XLSX. Esto es bastante straightforward pero recientemente recibí la llamada de un cliente que quería hacer esto teniendo un error al hacer el mapeo final. La solución es bastante sencilla para un usuario avanzado de Integration Services, pero me pareció mas que valido hacer este post detallando qué alternativas tenemos.
En este caso voy a realizarlo con la versión 2012 de SSIS y veran que el IDE es de Data Tools, pero es exactamente lo mismo en las versiones anteriores, al menos en 2008 y 2008R2.
Básicamente para reproducir la situación por la que me pidieron soporte solo necesitamos un DataFlow dentro de un paquete, obviamente.
Dentro del DataFlow solo agregamos un componente OLE DB Source y un objeto Excel Destination.
Paquete:
DataFlow:
Generalmente lo primero que suelo hacer en configurar el origen para que sea luego SSIS el que configure rápidamente el destino con sus mappings.
Antes les comento cual fue el inconveniente de esta persona. Se encontró con que quería hacer una extracción de una columna varchar de SQL Server hacia Excel. Entonces su instinto lo llevó a hacer manualmente el query dentro del Source, algo correcto. Luego lo unió con el Excel Destination y creo la hoja en el Excel Connection existente. Hasta ese momento estaba todo bien, el problema lo tuvo cuando intento realizar el mapping. El error que arrojaba estaba relacionado con los Unicode y Non-Unicode Data Types.
Microsoft en su motor de base de datos maneja tipos de dato de ambas clases. Excel en cambio solo maneja tipos de dato Unicode. Al ser incompatibles entre si aparece este error.
La solución es sencilla, simplemente el output del objeto OLE DB Source debía ser un tipo de dato unicode. Las opciones son aquellos llamados n*******.:
- nvarchar
- ntext
- ...
Pueden usar el que mejor se adapte al tipo de dato que tenían originalmente.
Una cosa importante, que tiene mas que ver con como se maneja SSIS. Si hicieron el OLE DB Source primero con el output en el Tipo de Dato incorrecto, al cambiarlo en el query no se actualiza automáticamente en el output de la tarea. Eso lo tiene que hacer manualmente en el Editor avanzado. Busquen el Output y van a ver que tiene el Tipo de Dato original, cámbienlo por Unicode.
La alternativa es borrar la tarea y regenerarla ya con la columna en Unicode.
Para este ejemplo utilice, con la idea de que sea mas visible, un objeto de conversión de tipos de datos. Donde en el mismo convertí el campo “Texto” a unicode.
Con esto ya no deberíamos tener inconveniente en el mapeo de campos en el destino.
Veamos el resultado de la ejecución y terminamos por esta vez.
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.