Usar um destino do conjunto de registrosUse a Recordset Destination

O destino do Conjunto de Registros não salva dados em uma fonte de dados externa.The Recordset destination does not save data to an external data source. Em vez disso, o destino do Conjunto de Registros salva dados na memória em um conjunto de registros armazenado em uma variável de pacote do Integration ServicesIntegration Services do tipo de dados Objeto .Instead, the Recordset destination saves data in memory in a recordset that is stored in an Integration ServicesIntegration Services package variable of the Object data type. Depois que o destino do Conjunto de Registros salva os dados, geralmente você usa um contêiner Loop Foreach com o enumerador ADO Foreach para processar uma linha do conjunto de registros de cada vez.After the Recordset destination saves the data, you typically use a Foreach Loop container with the Foreach ADO enumerator to process one row of the recordset at a time. O enumerador ADO Foreach salva o valor de cada coluna da linha atual em uma variável de pacote separada.The Foreach ADO enumerator saves the value from each column of the current row into a separate package variable. Em seguida, as tarefas que você configura dentro do contêiner Loop Foreach leem esses valores das variáveis e executam alguma ação com eles.Then, the tasks that you configure inside the Foreach Loop container read those values from the variables and perform some action with them.

Você pode usar o destino do Conjunto de Registros em muitos cenários diferentes.You can use the Recordset destination in many different scenarios. Veja alguns exemplos:Here are some examples:

  • É possível usar uma tarefa Enviar Email e a linguagem da expressão do Integration ServicesIntegration Services para enviar uma mensagem de email personalizada para cada linha no conjunto de registros.You can use a Send Mail task and the Integration ServicesIntegration Services expression language to send a customized e-mail message for each row in the recordset.

  • Você pode usar um componente Script configurado como fonte, dentro de uma tarefa de fluxo de dados, para ler os valores nas colunas do fluxo de dados.You can use a Script component configured as a source, inside a Data Flow task, to read the column values into the columns of the data flow. Em seguida, é possível usar transformações e destinos para transformar e salvar a linha.Then, you can use transformations and destinations to transform and save the row. Neste exemplo, a tarefa de fluxo de dados é executada uma vez para cada linha.In this example, the Data Flow task runs once for each row.

    As seções a seguir primeiro descrevem o processo geral de uso do destino do Conjunto de Registros e depois mostram um exemplo específico de como utilizar o destino.The following sections first describe the general process of using the Recordset destination and then show a specific example of how to use the destination.

Etapas gerais para o uso de um destino do conjunto de registrosGeneral Steps to Using a Recordset Destination

O procedimento a seguir resume as etapas necessárias para salvar dados em um destino do Conjunto de Registros e usar o contêiner Loop Foreach para processar cada linha.The following procedure summarizes the steps that are required to save data to a Recordset destination, and then use the Foreach Loop container to process each row.

Para salvar dados em um destino do Conjunto de Registros e processar cada linha usando o contêiner Loop ForeachTo save data to a Recordset destination and process each row by using the Foreach Loop container

  1. No SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT), crie ou abra um pacote do Integration ServicesIntegration Services .In SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT), create or open an Integration ServicesIntegration Services package.

  2. Crie uma variável que conterá o conjunto de registros salvo na memória pelo destino do Conjunto de Registros e defina o tipo de variável como Object.Create a variable that will contain the recordset saved into memory by the Recordset destination, and set the variable's type to Object.

  3. Crie mais variáveis dos tipos apropriados para conter os valores de cada coluna no conjunto de registros que você deseja usar.Create additional variables of the appropriate types to contain the values of each column in the recordset that you want to use.

  4. Adicione e configure o gerenciador de conexões necessário para a fonte de dados que você planeja usar no fluxo de dados.Add and configure the connection manager required by the data source that you plan to use in your data flow.

  5. Adicione uma tarefa de fluxo de dados ao pacote e, na guia Fluxo de Dados do SSISSSIS Designer, configure fontes e transformações para carregar e transformar os dados.Add a Data Flow task to the package, and on the Data Flow tab of SSISSSIS Designer, configure sources and transformations to load and transform the data.

  6. Adicione um destino do Conjunto de Registros ao fluxo de dados e conecte-o às transformações.Add a Recordset destination to the data flow and connect it to the transformations. Para a propriedade VariableName do destino do Conjunto de Registros, insira o nome da variável criada para conter o conjunto de registros.For the VariableName property of the Recordset destination, enter the name of the variable that you created to hold the recordset.

  7. Na guia Fluxo de Controle do SSISSSIS Designer, adicione um contêiner Loop Foreach e conecte esse contêiner após a tarefa de fluxo de dados.On the Control Flow tab of SSISSSIS Designer, add a Foreach Loop container and connect this container after the Data Flow task. Em seguida, abra o Editor de Loop Foreach para definir o contêiner com as seguintes configurações:Then, open the Foreach Loop Editor to configure the container with the following settings:

    1. Na página Coleção , selecione o Enumerador ADO Foreach.On the Collection page, select the Foreach ADO Enumerator. Em seguida, para Variável de origem do objeto ADO, selecione a variável que contém o conjunto de registros.Then, for ADO object source variable, select the variable that contains the recordset.

    2. Na página Mapeamentos de Variáveis , mapeie o índice com base em zero de cada coluna que você deseja usar para a variável apropriada.On the Variable Mappings page, map the zero-based index of each column that you want to use to the appropriate variable.

      Em cada iteração do loop, o enumerador popula essas variáveis com os valores de coluna da linha atual.On each iteration of the loop, the enumerator populates these variables with the column values from the current row.

  8. Dentro do contêiner Loop Foreach, adicione e configure tarefas para processar uma linha do conjunto de registros de cada vez, lendo os valores das variáveis.Inside the Foreach Loop container, add and configure tasks to process one row of the recordset at a time by reading the values from the variables.

Exemplo de uso do destino do Conjunto de RegistrosExample of Using the Recordset Destination

No exemplo a seguir, a tarefa de fluxo de dados carrega informações sobre os funcionários de AdventureWorks2012AdventureWorks2012 da tabela Sales.SalesPerson em um destino do Conjunto de Registros.In the following example, the Data Flow task loads information about AdventureWorks2012AdventureWorks2012 employees from the Sales.SalesPerson table into a Recordset destination. Em seguida, um contêiner Loop Foreach lê uma linha de dados de cada vez e chama uma tarefa Enviar Email.Then, a Foreach Loop container reads one row of data at a time, and calls a Send Mail task. A tarefa Enviar Email usa expressões para enviar uma mensagem de email personalizada a cada vendedor sobre o valor de seu bônus.The Send Mail task uses expressions to send a customized e-mail message to each salesperson about the amount of his or her bonus.

Para criar o projeto e configurar as variáveisTo create the project and configure the variables

  1. No SQL Server Data ToolsSQL Server Data Tools, crie um novo projeto do Integration ServicesIntegration Services .In SQL Server Data ToolsSQL Server Data Tools, create a new Integration ServicesIntegration Services project.

  2. No menu SSIS , selecione Variáveis.On the SSIS menu, select Variables.

  3. Na janela Variáveis , crie as variáveis que conterão o conjunto de registros e os valores de coluna da linha atual:In the Variables window, create the variables that will hold the recordset and the column values from the current row:

    1. Crie uma variável denominada BonusRecordsete defina seu tipo como Object.Create a variable named, BonusRecordset, and set its type to Object.

      A variável BonusRecordset contém o conjunto de registros.The BonusRecordset variable holds the recordset.

    2. Crie uma variável denominada EmailAddresse defina seu tipo como String.Create a variable named, EmailAddress, and set its type to String.

      A variável EmailAddress contém o endereço de email do vendedor.The EmailAddress variable holds the salesperson's e-mail address.

    3. Crie uma variável denominada FirstNamee defina seu tipo como String.Create a variable named, FirstName, and set its type to String.

      A variável FirstName contém o nome do vendedor.The FirstName variable holds the salesperson's first name.

    4. Crie uma variável denominada Bonuse defina seu tipo como Double.Create a variable named, Bonus, and set its type to Double.

      A variável Bonus contém o valor do bônus do vendedor.The Bonus variable holds the amount of the salesperson's bonus.

Para configurar os gerenciadores de conexõesTo configure the connection managers

  1. Na área Gerenciadores de Conexões do SSISSSIS Designer, adicione e configure um novo gerenciador de conexões OLE DB que se conecta ao banco de dados de exemplo AdventureWorks2012AdventureWorks2012 .In the Connection Managers area of the SSISSSIS Designer, add and configure a new OLE DB connection manager that connects to the AdventureWorks2012AdventureWorks2012 sample database.

    A fonte OLE DB na tarefa de fluxo de dados usará esse gerenciador de conexões para recuperar dados.The OLE DB source in the Data Flow task will use this connection manager to retrieve data.

  2. Na área Gerenciadores de Conexões, adicione e configure um novo gerenciador de conexões SMTP que se conecta ao servidor SMTP disponível.In the Connection Managers area, add and configure a new SMTP connection manager that connects to an available SMTP server.

    A tarefa Enviar Email dentro do contêiner Loop Foreach usará esse gerenciador de conexões para enviar emails.The Send Mail task inside the Foreach Loop container will use this connection manager to send emails.

Para configurar o fluxo de dados e o destino do Conjunto de RegistrosTo configure the data flow and the Recordset Destination

  1. Na guia Fluxo de Controle do SSISSSIS Designer, adicione uma tarefa de fluxo de dados à superfície de design.On the Control Flow tab of SSISSSIS Designer, add a Data Flow task to the design surface.

  2. Na guia Fluxo de Dados , adicione uma fonte OLE DB à tarefa de fluxo de dados e abra o Editor de Origem OLE DB.On the Data Flow tab, add an OLE DB source to the Data Flow task, and then open the OLE DB Source Editor.

  3. Na página Gerenciador de Conexões do editor, defina a fonte com as seguintes configurações:On the Connection Manager page of the editor, configure the source with the following settings:

    1. Para Gerenciador de Conexões OLE DB, selecione o gerenciador de conexões OLE DB criado anteriormente.For OLE DB connection manager, select the OLE DB connection manager that you previously created.

    2. Para Modo de acesso a dados, selecione o Comando SQL.For Data access mode, select SQL command.

    3. Em Texto do comando SQL, digite a seguinte consulta:For SQL command text, enter the following query:

      SELECT     Person.Contact.EmailAddress, Person.Contact.FirstName, CONVERT(float, Sales.SalesPerson.Bonus) AS Bonus  
      FROM         Sales.SalesPerson INNER JOIN  
                            Person.Contact ON Sales.SalesPerson.SalesPersonID = Person.Contact.ContactID  
      

      Observação

      É necessário converter o valor currency na coluna Bônus em um float , antes de carregar esse valor em uma variável de pacote cujo tipo é Double.You have to convert the currency value in the Bonus column to a float before you can load that value into a package variable whose type is Double.

  4. Na guia Fluxo de Dados , adicione um destino do Conjunto de Registros e conecte o destino após a fonte OLE DB.On the Data Flow tab, add a Recordset destination, and connect the destination after the OLE DB source.

  5. Abra o Editor de Destino do Conjunto de Registrose defina o destino com as seguintes configurações:Open the Recordset Destination Editor, and configure the destination with the following settings:

    1. Na guia Propriedades do Componente , para a propriedade VariableName , selecione User::BonusRecordset.On the Component Properties tab, for VariableName property, select User::BonusRecordset.

    2. Na guia Colunas de Entrada , selecione todas as três colunas disponíveis.On the Input Columns tab, select all three of the available columns.

Para configurar o contêiner Loop Foreach e executar o pacoteTo configure the Foreach Loop container and run the package

  1. Na guia Fluxo de Controle do SSISSSIS Designer, adicione um contêiner Loop Foreach e conecte esse contêiner após a tarefa de fluxo de dados.On the Control Flow tab of SSISSSIS Designer, add a Foreach Loop container, and connect the container after the Data Flow task.

  2. Abra o Editor de Loop Foreache defina o contêiner com as seguintes configurações:Open the Foreach Loop Editor, and configure the container with the following settings:

    1. Na página Coleção , para Enumerador, selecione Enumerador ADO Foreache, para Variável de origem do objeto ADO, selecione User::BonusRecordset.On the Collection page, for Enumerator, select Foreach ADO Enumerator, and for ADO object source variable, select User::BonusRecordset.

    2. Na página Mapeamentos de Variáveis , mapeia User::EmailAddress para índice 0, User::FirstName para índice 1 e User::Bonus para índice 2.On the Variable Mappings page, map User::EmailAddress to index 0, User::FirstName to index 1, and User::Bonus to index 2.

  3. Na guia Fluxo de Controle , dentro do contêiner Loop Foreach, adicione uma tarefa Enviar Email.On the Control Flow tab, inside the Foreach Loop container, add a Send Mail task.

  4. Abra o Editor da Tarefa Enviar Emaile, na página Email , defina a tarefa com as seguintes configurações:Open the Send Mail Task Editor, and then on the Mail page, configure the task with the following settings:

    1. Para SmtpConnection, selecione o gerenciador de conexões SMTP configurado anteriormente.For SmtpConnection, select the SMTP connection manager that was configured previously.

    2. Em De, insira um endereço de email apropriado.For From, enter an appropriate e-mail address.

      Se você usar seu próprio endereço de email, poderá confirmar a execução bem-sucedida do pacote.If you use your own e-mail address, you will be able to confirm that the package runs successfully. Você receberá recibos de impossibilidade de entrega das mensagens enviadas pela tarefa Enviar Email aos vendedores fictícios de AdventureWorks2012AdventureWorks2012.You will receive undeliverable receipts for the messages sent by the Send Mail task to the fictitious salespersons of AdventureWorks2012AdventureWorks2012.

    3. Em Para, insira um endereço de email padrão.For To, enter a default e-mail address.

      Esse valor não será usado, mas será substituído em tempo de execução pelo endereço de email de cada vendedor.This value will not be used, but will be replaced at run time by the e-mail address of each salesperson.

    4. Em Assunto, digite "Seu bônus anual".For Subject, enter "Your annual bonus".

    5. Em MessageSourceType, selecione Entrada Direta.For MessageSourceType, select Direct Input.

  5. Na página Expressões do Editor da Tarefa Enviar Email, clique no botão de reticências (...) para abrir o Editor de Expressões de Propriedade.On the Expressions page of the Send Mail Task Editor, click the ellipsis button (...) to open the Property Expressions Editor.

  6. No Editor de Expressões de Propriedade, insira as seguintes informações:In the Property Expressions Editor, enter the following information:

    1. Em ToLine, adicione a seguinte expressão:For ToLine, add the following expression:

      @[User::EmailAddress]  
      
    2. Para a propriedade MessageSource , adicione a seguinte expressão:For the MessageSource property, add the following expression:

      "Dear " +  @[User::FirstName] + ": The amount of your bonus for this year is $" +  (DT_WSTR, 12) @[User::Bonus] + ". Thank you!"  
      
  7. Execute o pacote.Run the package.

    Caso tenha especificado um servidor SMTP válido e fornecido seu próprio endereço de email, você receberá recibos de impossibilidade de entrega que a tarefa Enviar Email envia aos vendedores fictícios de AdventureWorks2012AdventureWorks2012.If you have specified a valid SMTP server and provided your own e-mail address, you will receive undeliverable receipts for the messages that the Send Mail task sends to the fictitious salespersons of AdventureWorks2012AdventureWorks2012.