Este artículo pertenece a la serie “Novedades de Integration Services en SQL 2012”, serie en la que damos un repaso a las principales novedades que nos trae Integration Services en la nueva versión explorando la entrega CTP3. Puedes encontrar el índice de artículos al pie de este.

Entre las novedades en la versión de SQL 2012 de Integration Services se ha añadido una nueva tarea que podemos utilizar en el Control Flow

Expression Task

Permite la evaluación de expresiones y asignación de valores a parámetros y variables.

Vamos a ver dos ejemplos:


Supongamos que tenemos un parámetro CSVOrigen en nuestro paquete que nos informa de la ruta donde se encuentra un fichero CSV.

[$Package::CSVOrigen] = C:RespositorioFicherosCSVOrigen.csv

Durante la ejecución del paquete si surge algún error al leer del fichero, las filas erróneas debemos redirigirlas a la misma carpeta que el origen (C:repositorioFicheros). A través de la Expression Task vamos a extraer el directorio de la ruta del archivo a la variable RutaFicheros.

La siguiente expresión obtiene la carpeta de la ruta de origen almacenada en el parámetro CSVOrigen:

(LEFT( @[$Package::CSVOrigen] , LEN( @[$Package::CSVOrigen]  ) - FINDSTRING(REVERSE( @[$Package::CSVOrigen] ),"\",1) +1 ))

Como se puede observar, hacemos uso de la nueva función Left() .

Ahora, si introducimos la expresión en la Expression Task y lo asignamos a la variable RutaFicheros, quedaría como muestra la imagen:


Otro ejemplo sencillo puede ser obtener el tiempo de ejecución de un componente. Colocamos el componente al que queremos medir en un contenedor y conectamos un Expression Task, como se muestra en la imagen. Le añadimos la expresión:

@[User::TiempoEjecucion] = Datediff("ms", @[System::ContainerStartTime], getdate())

Podemos añadir un Breakpoint en el evento Post-Execute de la tarea y rescatar el valor de la variable en la ventana Watch 1:


Conclusiones

Expression Task nos permite asignar valores a parámetros y variables durante la ejecución del paquete, además de poder organizar en que momento del Control Flow debe realizarse. Anteriormente podíamos hacer algo similar con las variables y la propiedad EvaluateAsExpression pero la expresión se resolvía en primera instancia, no podíamos decidir cuando sin usar una Script task.

Víctor M García Sánchez
Últimas entradas de Víctor M García Sánchez (ver todo)