Condicionar la ejecución de Tareas en un Paquete de SSIS 2005-2008


En las consultorías y capacitaciones, me encuentro frecuentemente con la necesidad de generar un flujo de Integration Services que permita verificar el estatus en una tabla y en base a éste, ejecutar tareas de carga de información. Atendiendo esta inquietud por parte de muchos, mencionaré los pasos necesarios para hacer esta actividad.

Generación de Base de Datos

1) Ubicados en MS SQL Server Management Studio, generamos una base de datos llamada dbSSISPanelControl.

 

 

2)Creamos una tabla que llamaremos dbo.configuracionSSIS, con la siguiente estructura:

 

 

 

Incluyo el script SQL para apoyo.

USE [dbSSISPanelControl]

GO

 

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[configuracionSSIS]’) AND type in (N’U’))

DROP TABLE [dbo].[configuracionSSIS]

GO

 

USE [dbSSISPanelControl]

GO

 

SET ANSI_NULLS ON

GO

 

SET QUOTED_IDENTIFIER ON

GO

 

SET ANSI_PADDING ON

GO

 

CREATE TABLE [dbo].[configuracionSSIS](

    [idEvento] [int] IDENTITY(1,1) NOT NULL,

    [DescEvento] [varchar](50) NOT NULL,

    [ValorEvento] [int] NOT NULL,

CONSTRAINT [PK_configuracionSSIS] PRIMARY KEY CLUSTERED

(

    [idEvento] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

 

GO

 

SET ANSI_PADDING OFF

GO

 

3)Insertamos en la tabla los siguiente valores:

 

DescEvento

ValorEvento

FLAG EJECUCION CONDICIONAL

1

 

donde ValorEvento = 0 significa no ejecutar tarea y ValorEvento = 1 significa ejecutar tarea.

 

Generación de Proyecto SSIS

1)Ahora creamos un proyecto Integration Services. Asignamos el nombre SSIS_EjecucionCondicional.


 

2)Cambiamos el nombre del paquete Package.dtsx por EjecucionCondicional.dtsx.

 

 

 

3)Agregamos los siguientes objetos en el Control Flow .

Tarea

Descripción

Execute SQL Task

SQL Obtener Flag Ejecucion Condicional

Script Task

SCR Ejecutar Tarea ValorEntero igual 1

 


 

4)En la sección Connection Managers, creamos una conexión a la Base de Datos en MS SQL Server dbSSISPanelControl. El nombre de la conexión será dbSSISPanelControl_cm.

 

5)Muy bien, ahora creamos una variable que llamaremos FlagEjecucionCondicional con Scope a nivel del paquete, tipo de dato Int32 y valor 0.

 

6)Enseguida vamos a modificar la tarea Execute SQL Task. Dar doble clic en el objeto y asignar los siguientes valores.

Opción

Valor

ResultSet

Single row

Connection Type

OLE DB

Connection

dbSSISPanelControl_cm

SQL Statement

SELECT ValorEvento

FROM dbo.configuracionSSIS

WHERE (DescEvento = ‘FLAG EJECUCION CONDICIONAL’)

 

 

7)Ahora damos clic en el menú izquierdo Result Set. En esta sección configuramos el resultado que nos genera la instrucción SELECT para asignarlo a la variable FlagEjecucionCondicional.

 

8)Situados en la sección Result Set, damos clic en el botón Add y definimos los siguientes valores:

Columna

Valor

Observaciones

Result Name

ValorEvento

Este valor equivale al nombre de la columna que recibimos en el SELECT.

Variable Name

User::
FlagEjecucionCondicional

 

 

9)Para confirmar los cambios, damos clic en cl botón OK.

 

10)A continuación generamos el constraint Success entre el objeto Execute SQL Task y Script Task.

 

11)Realizado el paso anterior, damos doble clic en el constraint para modificar las condiciones que involucrarán al evento Success y el valor de la variable FlagEjecucionCondicional. Asignamos los valores de la siguiente tabla.

Opción

Valor

Evaluation operation

Expression and Constraint

Value

Success

Expressión

@FlagEjecucionCondicional == 1

 

 

12)Presionamos el botón Test para verificar la condición. Ahora dar clic en el botón OK.

 

13)Nuevamente presionamos el botón OK para guardar los cambios en el objeto Execute SQL Task. Podemos apreciar que aparece un símbolo fx, el cual indica que existe una expresión.

14)Seleccionamos el objeto Script Task dando doble clic en él y asignamos los valores en base a la siguiente tabla.

Opción

Valor

ReadOnlyVariables

User::
FlagEjecucionCondicional

 

 

15)Ahora damos clic en el botón Edit Script y
en el método Main escribimos el siguiente código.

MessageBox.Show(Dts.Variables(“FlagEjecucionCondicional”).Value)

 

16)Cerramos el editor de código y damos clic en el botón OK.

 

17)En seguida probamos el paquete presionando la tecla F5 (Start Debugging).

18)Presionamos el botón OK de la pantalla que muestra el valor 1. Apreciamos que el paquete se ejecuta satisfactoriamente.

19)Ahora modificamos el valor 1 por 0 (CERO) del registro FLAG EJECUCION CONDICIONAL.

 

20)Finalmente ejecutamos el paquete y verificamos el funcionamiento condicional.

Espero que artículo sea de utilidad para muchos. ¡Suerte!

8 comments so far

  1. Celia on

    Me sirvió muchisimo este ejemplo. ¡Muchas Gracias!

  2. huellajuvenil on

    man consulta para que me devuelva un mensaje cuando una tabla a hace join a dos tablas b y c tengo que crear variables tmb?? ayudame

    • Blog de Oliver Blanco on

      Hola que tal.

      Considerando tu explicación, utilizaría un stored pocedure y en base a las condiciones que se realicen internamente, en una variable de salida (OUTPUT) asignaría el valor que te indique si hubo o no JOIN.

      Espero haber resulto tu duda. En caso contrario, no dejes de mandarme una explicación más detallada.

      Saludos

  3. Norma on

    Hola!!

    Seguí todos los pasos y me aparece el siguiente error:

    Error: Error al asignar un valor a la variable “FlagEjecucionCondicional” : “No se puede encontrar la columna ValorEvento en el conjunto de resultados.”.

    Podrían ayudarme!!?? ya intente realizarlo de diferentes formas y obtengo el mismo error.

    De antemano gracias.

    Saludos!

  4. Valery on

    Hola Oliver, te comento que yo cargue mi codigo en el script, como lo indicas, al guardar el paquete y ejecutar me devuelve que no se puede cargar el script para su ejecución, (ya agregue permisos sobre la carpteta que contiene el proyecto)a que se puede deber esto?

    • Blog de Oliver Blanco on

      Hola Valery buen día.

      Para solucionar un error, favor de realizar estos pasos:
      1. Verificar qué lenguaje estas utilizando en el Script (VB o C#)
      2. La variable FlagEjecucionCondicional debe existir y debe esta asociada al ResultSet (ver paso 8).
      3. La variable FlagEjecucionCondicional debe asociarse al objeto Script Task (ver paso 14).

      Cabe mencionarte que no se accede a ninguna carpeta del Sistema Operativo.

      Si deseas, puedes enviarme el proyecto para revisarlo. El correo es contacto@oblanco.mx

      Saludos y quedo a la espera.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: