Configuración dinámica del comando SQL

Cuando no tenemos problemas con los metadatos y el objeto DataReader Source puede ser utilizado, podemos modificar la sentencia SQL de forma dinámica. Para realizar este tipo de configuración necesitamos tener una variable definida a nivel de paquete.

Mediante una tara de script actualizaremos el contenido de dicha variable para que contenga la sentencia SQL que deseamos ejecutar contra la fuente de datos a través del conector ODBC. En nuestro ejemplo vamos a generar una sentencia que va a devolver los clientes modificados en el mes de carga. El mes a cargar está almacenado en otra variable del paquete y será pasada como variable de lectura a la tarea de script. La variable MiComandoSQL se pasará como variable de lectura escritura.

El script a generar será tan sencillo como sigue:

         Public Sub Main()        

        ‘ Add your code here

Dts.Variables(«MiComandoSQL»).Value = «SELECT [IdCustomer]» + _

«,[CustomerName]» + _

«,[EarningIncome]» + _

«,[IsActive]» + _

«,[ModifiedDate]» + _

«FROM [Demos].[dbo].[Customer]» + _

«WHERE Month(ModifiedDate) = « + _

                                Dts.Variables(«MesCarga»).Value.ToString

        Dts.TaskResult = Dts.Results.Success

    End Sub

 

Para que nuestro conector ODBC reciba el contenido de la variable tenemos que hacerlo a través de las expresiones de la tarea de flujo de datos donde está incrustrado. Cuando expandimos dichas expresiones del flujo de datos veremos que, además de las propiedades de la tarea de flujo de datos, también aparece la propiedad ‘SQL Command’ de nuestro conector Data Reader.

 

Para evitar errores en la etapa de depuración del paquete es recomendable poner la propiedad DelayValidation a TRUE en la tarea de flujo de datos que contiene el conector ODBC.

En este momento nuestro paquete tiene dos tareas en el flujo de control (una tarea script que genera el comando SQL a ejecutar y el flujo de datos que va a traer la información). En el flujo de datos vamos a poner un destino Trash y vamos a añadir un visualizador de datos para comprobar que solo estamos trayendo aquellos registros que hemos definido a través de la variable MesCarga (que en nuestro caso tiene el valor 12)

Al ejecutar el paquete el visualizador de datos nos va a mostrar solo aquellos registros traídos por nuestro comando SQL dinámico, es decir, los registros correspondientes al mes de Diciembre.