De programacion y otros demonios

lunes, 15 de noviembre de 2010

SSIS - Como usar foreach Loop

Inicio una serie de posts sobre cómo usar cada uno de los elementos del toolbox; aprovecho para ayudar a Maria sobre el uso del foreach Loop.  Los ejemplos los realizo sobre la base de datos de ejemplo AdventureWorks.  El ejemplo es leer los resultados de una tabla y por cada uno, ejecutar otra consulta sql.

1.  Creo una variable a nivel de paquete llamada V_resultados de tipo Object, aquí guardaré todo el resultset de mi consulta sql.  Crea otra variable llamada V_idEmployee de tipo Int32, esta es una variable temporal que usaremos para guardar cada uno de los id de la consulta a medida que lo vamos recorriendo en el ciclo.

2.  Agrega y configura un componente "Execute SQL Task" con la sentencia select; y en la sección de ResultSet agrega la variable V_resultados.  De esta forma todos mis registros quedan allí guardados.




3. Agrega y configura un componente "Foreach Loop Container"; en la sección Collection escoge como enumerator el "Foreach ADO enumerator" y como ADO Object source variable, nuestra variable V_resultados.  En la sección Variable Mappings, elige V_idEmployee como index 0. De esta forma a cada iteración del ciclo se guardará cada uno de los id de empleado en esa variable.





4.  Por último agrega un componente "Execute SQL Task", con la sentencia sql que necesitas, por lo general es un update, para mi ejemplo hice otro select (jajaja) en fin; mi consulta recibe como parametro el id del empleado, asi que en la sección Parameter mapping agrego mi variable asignada al nombre de parametro 0.






El componente foreach loop es realmente muy útil, y puedo usarlo sobre las siguientes colecciones:
  • Foreach ADO enumerator.  Usado para recorrer registros de tablas, como lo usamos en este ejemplo.
  • Foreach ADO.NET Schema Rowset enumerator. Usado para listar la información del esquema de un data source. Por ejemplo, obtener una lista de las tablas en la BD de adventureWorks
  • Foreach File enumerator. Para leer los archivos en un folder.  Supongamos que un proceso deja las ventas diarias en una carpeta en archivos CSV, pero en esa carpeta tambien me guardan archivos de word, excel, etc.  Podríamos usar este componente para leer solo los archivos con extensión CSV, y que empiecen por VENTADIA y así trabajar con sus datos.
  • Foreach From Variable enumerator.  Para enumerar los elementos dentro de una variable, por ejemplo leer cada uno de los valores de un arreglo.
  • Foreach Item enumerator.
  • Foreach Nodelist enumerator.
  • Foreach SMO enumerator.
Estos tres últimos no los he tenido que usar.  He tomado algunos fragmentos del sitio de microsoft en inglés: http://msdn.microsoft.com/en-us/library/ms141724.aspx donde pueden leer más al respecto.

Etiquetas: