Hola, en esta entrega les
mostraré una de las formas para poder cargar la información contenida en
archivos planos pero que no contienen la misma cantidad de columnas, utilizando
Integration Services.
Para comenzar, les mostraré los archivos
que como podemos observar no contienen la misma cantidad de columnas:
En un post anterior ( CARGAR
ARCHIVOS CON INTEGRATION SERVICES ) ya explique como podemos cargar varios
archivos, utilizando el mismo paquete podemos hacer unas pequeñas
modificaciones, si nosotros mantenemos la conexión al archivo actual, obtendremos
algo similar a lo siguiente donde podemos observar que el archivo en sus filas
contiene un número variable de columnas:
Lo que necesitamos hacer a
continuación es, en el apartado Advanced
borrar las columnas y definir solo una de un tamaño considerable para poder
leer la línea completa como se muestra en la imagen:
En nuestro Flat File Source ya no veremos todas las columnas declaradas en el Flat File Connection Manager, porque
las hemos eliminado y en su lugar solo definimos una sola columna.
Posteriormente necesitamos
agregar un objeto Script Component que
es indispensable para completar nuestro objetivo.
Hacemos doble click y en el
apartado Input Columns seleccionamos
la que declaramos previamente, en el caso del ejemplo línea, después en el apartado Inputs
and Outputs Columns, del lado derecho en Ouput Columns debemos agregar las columnas que consideramos
nuestros archivos traerán en su contenido, para el caso del ejemplo, agregué 11
columnas de tipo DT_STR y longitud 50.
En el mismo Script Transformation Editor, pero en el apartado Script daremos click en Edit Script… y se abrirá la ventana para agregar el código
que se muestra.
public override void Input0_ProcessInputRow(Input0Buffer Row) { char[] delimitador = { '|' }; string[] columnas; columnas = Row.linea.Split(delimitador); try { Row.Column0 = columnas.Length > 0 ? columnas[0] : null; Row.Column1 = columnas.Length > 1 ? columnas[1] : null; Row.Column2 = columnas.Length > 2 ? columnas[2] : null; Row.Column3 = columnas.Length > 3 ? columnas[3] : null; Row.Column4 = columnas.Length > 4 ? columnas[4] : null; Row.Column5 = columnas.Length > 5 ? columnas[5] : null; Row.Column6 = columnas.Length > 6 ? columnas[6] : null; Row.Column7 = columnas.Length > 7 ? columnas[7] : null; Row.Column8 = columnas.Length > 8 ? columnas[8] : null; Row.Column9 = columnas.Length > 9 ? columnas[9] : null; Row.Column10 = columnas.Length > 10 ? columnas[10] : null; } catch (Exception e) { } }
Ahora solo en nuestro destino,
necesitamos tener en nuestra tabla la misma cantidad de columnas que
declaramos, de preferencia con el mismo nombre para que automáticamente se
liguen como en la imagen y como podemos observar la columna línea no se liga
con ninguna columna en el destino.
Corremos nuestro paquete y al
momento de consultar nuestra tabla, podremos observar que en algunas columnas
el contenido es NULL, para el caso del ejemplo o el valor que hayamos indicado
en la edición del Script.
Espero que les sirva de ayuda y
cualquier duda o comentario será respondido a la brevedad posible.
SALUDOS.
No hay comentarios.:
Publicar un comentario