Usar un destino de conjunto de registros

El destino de conjunto de registros no guarda los datos en un origen de datos externo. En su lugar, guarda los datos en memoria, en un conjunto de registros que se almacena en una variable de paquete Integration Services del tipo de datos Object. Una vez que el destino de conjunto de registros guarda los datos, normalmente se utiliza un contenedor de bucles Foreach con el enumerador de ADO para Foreach para procesar una fila del conjunto de registros cada vez. El enumerador de ADO para Foreach guarda el valor de cada columna de la fila actual en una variable de paquete independiente. A continuación, las tareas que se configuran en el contenedor de bucles Foreach leen esos valores de las variables y realizan alguna acción con ellos.

Puede utilizar el destino de conjunto de registros en muchos escenarios diferentes. A continuación se muestran algunos ejemplos:

  • Puede utilizar una tarea Enviar correo y el lenguaje de expresiones Integration Services para enviar un mensaje de correo electrónico personalizado por cada fila del conjunto de registros.

  • Puede utilizar un componente de script configurado como origen en una tarea Flujo de datos para leer los valores de las columnas del flujo de datos. A continuación, puede utilizar transformaciones y destinos para transformar y guardar cada fila. En este ejemplo, la tarea Flujo de datos se ejecuta una vez por cada fila.

En las secciones siguientes se describe en primer lugar el proceso general de uso del destino de conjunto de registros y, a continuación, se muestra un ejemplo concreto acerca de cómo se utiliza el destino.

Pasos generales para utilizar un destino de conjunto de registros

El procedimiento siguiente resume los pasos que son necesarios para guardar los datos en un destino de conjunto de registros y utilizar, a continuación, el contenedor de bucles Foreach para procesar cada fila.

Para guardar los datos en un destino de conjunto de registros y procesar cada fila utilizando el contenedor de bucles Foreach

  1. En Business Intelligence Development Studio, cree o abra un paquete de Integration Services.

  2. Cree una variable que contendrá el conjunto de registros guardados en la memoria por el destino de conjunto de registros y establezca el tipo de la variable en Object.

  3. Cree variables adicionales de los tipos adecuados para que contengan los valores de cada columna del conjunto de registros que desea utilizar.

  4. Agregue y configure el administrador de conexiones requerido por el origen de datos que pretende utilizar en su flujo de datos.

  5. Agregue una tarea Flujo de datos al paquete y en la ficha Flujo de datos del Diseñador SSIS, configure los orígenes y las transformaciones que se van a utilizar para cargar y transformar los datos.

  6. Agregue un destino de conjunto de registros al flujo de datos y asócielo con las transformaciones. En la propiedad VariableName del destino de conjunto de registros, escriba el nombre de la variable que creó para el conjunto de registros.

  7. En la ficha Flujo de control del Diseñador SSIS, agregue un contenedor de bucles Foreach y conecte este contenedor después de la tarea Flujo de datos. A continuación, abra el Editor de bucles Foreach para configurar el contenedor con los valores siguientes:

    1. En la página Colección, seleccione el enumerador ADO para Foreach. A continuación, en Variable de origen de objeto ADO, seleccione la variable que contiene el conjunto de registros.

    2. En la página Asignaciones de variables, asigne el índice de base cero de cada columna que desea utilizar a la variable adecuada.

      En cada iteración del bucle, el enumerador rellena estas variables con los valores de columna de la fila actual.

  8. Dentro del contenedor de bucles Foreach, agregue y configure las tareas que va a utilizar para procesar una fila del conjunto cada vez al leer los valores de las variables.

Ejemplo de uso del destino de conjunto de registros

En el ejemplo siguiente, la tarea Flujo de datos carga información sobre los empleados de AdventureWorks2008R2 de la tabla Sales.SalesPerson en un destino de conjunto de registros. A continuación, un contenedor de bucles Foreach lee una fila de datos cada vez y llama a la tarea Enviar correo. La tarea Enviar correo utiliza expresiones para enviar un mensaje de correo electrónico personalizado a cada vendedor sobre el importe de su paga extraordinaria.

Para crear el proyecto y configurar las variables

  1. En BI Development Studio, cree un nuevo proyecto de Integration Services.

  2. En el menú SSIS, seleccione Variables.

  3. En la ventana Variables, cree las variables que contendrán el conjunto de registros y los valores de columna de la fila actual:

    1. Cree una variable denominada, BonusRecordset y establezca su tipo en Object.

      La variable BonusRecordset contiene el conjunto de registros.

    2. Cree una variable denominada Dirección de correo electrónico y establezca su tipo en String.

      La variable EmailAddress contiene la dirección de correo electrónico del vendedor.

    3. Cree una variable denominada FirstName y establezca su tipo en String.

      La variable FirstName contiene el nombre propio del vendedor.

    4. Cree una variable denominada Bonus y establezca su tipo en Double.

      La variable Bonus contiene el importe de la paga extraordinaria del vendedor.

Para configurar los administradores de conexión

  1. En el área de Administradores de conexiones del Diseñador SSIS, agregue y configure un nuevo administrador de conexiones OLE DB que se conecte a la base de datos de ejemplo AdventureWorks2008R2.

    El origen de OLE DB de la tarea Flujo de datos utilizará este administrador de conexiones para recuperar los datos.

  2. En el área de Administradores de conexiones, agregue y configure un nuevo administrador de conexiones SMTP que se conecte a un servidor SMTP disponible.

    La tarea Enviar correo incluida en el contenedor de bucles Foreach utilizará este administrador de conexiones para enviar correos electrónicos.

Para configurar el flujo de datos y el destino de conjunto de registros

  1. En la ficha Flujo de control del Diseñador SSIS, agregue una tarea Flujo de datos a la superficie de diseño.

  2. En la ficha Flujo de datos, agregue un origen de OLE DB a la tarea Flujo de datos y, a continuación, abra el Editor de origen de OLE DB.

  3. En la página Administrador de conexiones del editor, configure el origen con los valores siguientes:

    1. En Administrador de conexiones OLE DB, seleccione el administrador de conexiones OLE DB que creó previamente.

    2. En Modo de acceso a datos, seleccione Comando SQL.

    3. En Texto de comando SQL, escriba la consulta siguiente:

      SELECT     Sales.vSalesPerson.EmailAddress, Sales.vSalesPerson.FirstName, CONVERT(float, Sales.SalesPerson.Bonus) AS Bonus
      FROM         Sales.SalesPerson INNER JOIN
                            Sales.vSalesPerson ON Sales.SalesPerson.BusinessEntityID = Sales.vSalesPerson.BusinessEntityID;
      

      Nota

      Tiene que convertir el valor currency de la columna Bonus en un valor float antes de poder cargar ese valor en una variable de paquete cuyo tipo sea Double.

  4. En la ficha Flujo de datos, agregue un destino de conjunto de registros y conecte el destino después del origen de OLE DB.

  5. Abra el Editor de destino de conjunto de registros y configure el destino con los valores siguientes:

    1. En la ficha Propiedades de componente, en la propiedad VariableName, seleccione User::BonusRecordset.

    2. En la ficha Columnas de entrada, seleccione las tres columnas disponibles.

Para configurar el contenedor de bucles Foreach y ejecutar el paquete

  1. En la ficha Flujo de control del Diseñador SSIS, agregue un contenedor de bucles Foreach y conecte el contenedor después de la tarea Flujo de datos.

  2. Abra el Editor de bucles Foreach y configure el contenedor con los valores siguientes:

    1. En la página Colección, en Enumerador, seleccione Enumerador de ADO para Foreach y en Variable de origen de objeto ADO, seleccione User::BonusRecordset.

    2. En la página Asignaciones de variables, asigne User::EmailAddress al índice 0, User::FirstName al índice 1 y User::Bonus al índice 2.

  3. En la ficha Flujo de control, en el contenedor de bucles Foreach, agregue una tarea Enviar correo.

  4. Abra el Editor de la tarea Enviar correo, y a continuación, en la página Correo, configure la tarea con los valores siguientes:

    1. En SmtpConnection, seleccione el administrador de conexiones SMTP que se configuró previamente.

    2. En De, escriba una dirección de correo electrónico adecuada.

      Si utiliza su propia dirección de correo electrónico, podrá comprobar que el paquete se ejecuta correctamente. Recibirá las confirmaciones de los mensajes que no se pudieron entregar enviados por la tarea Enviar correo a los vendedores ficticios de AdventureWorks2008R2.

    3. En A, escriba una dirección de correo electrónico predeterminada.

      Este valor no se utilizará, pero se reemplazará en tiempo de ejecución por la dirección de correo electrónico de cada vendedor.

    4. En Asunto, escriba "Paga extraordinaria anual".

    5. En MessageSourceType, seleccione Entrada directa.

  5. En la página Expresiones del Editor de la tarea Enviar correo, haga clic en el botón de puntos suspensivos (...) para abrir el Editor de expresiones de propiedad.

  6. En el Editor de expresiones de propiedad, escriba la información siguiente:

    1. En ToLine, agregue la expresión siguiente:

      @[User::EmailAddress]
      
    2. En la propiedad MessageSource, agregue la expresión siguiente:

      "Dear " +  @[User::FirstName] + ": The amount of your bonus for this year is $" +  (DT_WSTR, 12) @[User::Bonus] + ". Thank you!"
      
  7. Ejecute el paquete.

    Si especificó un servidor SMTP válido y proporcionó su propia dirección de correo electrónico, recibirá las confirmaciones de los mensajes que no se pueden entregar que la tarea Enviar correo enviará a los vendedores ficticios de AdventureWorks2008R2.