Pergunte ao Gordo – Arquivos dinâmicos com SSIS

Galera,

Estou iniciando hoje uma nova séria no blog com o nome de PERGUNTE AO GORDO.

A idéia é responder as dúvidas que recebo por email de forma bem clara e bem prática.

Neste primeiro post responderei uma pergunta bem interessante que recebi na semana passada:

“Vitor, preciso ler uma tabela de funcionários e exportar os registros para arquivos textos que serão criados baseados no ano de admissão de cada funcionário. Por exemplo, um funcionário que foi admitido em 01-01-2001 tem de estar no arquivo texto 2001.txt, um funcionário que foi admitido em 01-01-1998 tem de estar no arquivo texto 1998.txt e assim por diante.”

Para esta demonstração utilizarei a tabela ilustrada na Figura 1.

Tabela
Figura 1 – Tabela Employee

Inicialmente precisamos descobrir quais os anos de admissão existentes na tabela Employee utilizando a uma tarefa Execute SQL Task.

Será necessário que o resultado da consulta executada pela tarefa seja retornado em formato de Set e para isso definimos a propriedade ResultSet como Full result set, conforme ilustrado na Figura 2.

SSIS_1
Figura 2 – Configuração da tarefa Execute SQL Task

Também será necessário mapear o resultado da consulta executada pela tarefa para uma variável do tipo object, conforme ilustrado na Figura 3.

SSIS_2
Figura 3 – Mapeando o resultado para uma variável

Com o resultado da consulta em uma variável, será necessário utilizarmos uma tarefa Foreach Loop para navegar em cada um dos registros do resultset.

A coleção utilizada pela tarefa Foreach Loop deve ser Foreach ADO Enumerator, conforme ilustrado na Figura 4.

SSIS_3
Figura 4 – Configuração da tarefa Foreach Loop

Cada registro lido pela tarefa Foreach Loop será armazenado em uma variável chamada AnoAdm, do tipo Int32, que será utilizada posteriormente na construção da consulta dinâmica que criará o conteúdo de cada arquivo texto, conforme ilustrado na Figura 5.

SSIS_4
Figura 5 – Mapeando a variável

É importante ressaltar que o valor do índice deve ser 0, como ilustrado na Figura 6.

SSIS_5
Figura 6 – Definindo o valor do index

Após a configuração da tarefa Foreach Loop, é necessário criar uma tarefa Data Flow Task, conforme ilustrado na Figura 7.

SSIS_6
Figura 7 – Criação da tarefa Data Flow Task

A primeira tarefa necessária para a criação dos arquivos é a seleção dos registros na origem de dados através de uma tarefa OleDB Source, conforme ilustrado na Figura 8.

SSIS_6a
Figura 8 – Criação da tarefa OleDB Source

Para que seja possível a exportação dos funcionários baseado em seu ano admissão, precisamos que a consulta à origem de dados seja dinâmica, conforme ilustrado na Figura 9.

SSIS_7
Figura 9 – Consulta dinâmica na origem de dados

Utilizamos o caractere ? para que o SSIS entenda que é um parâmetro externo e mapeamos esse parâmetro com o valor da variável AnoAdm que é preenchida na tarefa Foreach Loop, ou seja, para cada linha retornada na tarefa Foreach Loop será executada uma consulta na origem de dados retornando apenas os funcionários daquele ano de admissão específico.

Selecionaremos todas as colunas existentes na tabela Employee, conforme ilustrado na Figura 10.

SSIS_8
Figura 10 – Seleção de colunas da tabela Employee

A última tarefa necessária é a Flat File Destination, que deverá criar dinamicamente um arquivo de saída para cada ano de admissão existente na tabela Employee.

Inicialmente é preciso configura um Connection Manager fixo para que possamos alterar suas propriedades através do uso de expressões, conforme ilustrado na Figura 11.

SSIS_11
Figura 11 – Configuração do Connection Manager

Após a criação do Connection Manager, será necessário alterar a propriedade ConnectionString, conforme ilustrado na Figura 12.

SSIS_14
Figura 12 – Configuração da propriedade ConnectionString

Com estas tarefas realizamos os seguintes passos:

1) Leitura da tabela Employee para descobrir os anos de admissão existentes;
2) Navegação nos registros encontrados;
3) Para cada registro encontrado, selecionamos os funcionários e exportamos para um arquivo texto específico

Caso tenham interesse em fazer o download do projeto, bastar acessar o link abaixo:

CriarArquivosDinamicamente

Espero que tenham gostado e não deixe de fazer sua inscrição no blog.

Grande abraço.

Anúncios
  1. Janaina Andrade
    18/02/2014 às 9:10

    Muito bom!! Obrigada por compartilhar Vitor.

  2. thiago
    13/09/2016 às 23:08

    Eita post que me ajuda no meu dia a dia

    • 14/09/2016 às 10:05

      Hahahahaha e ai Thiagão, tudo bem contigo meu amigo?
      Fico muito feliz de ajudá-lo e fazer seu dia a dia mais fácil.
      Se tiver qualquer dúvida é só me avisar.
      🙂

  3. Regi
    17/02/2017 às 21:25

    Olá… Excelente post. Muito obrigado

    Você sabe como criar uma coluna e alimentar ela com o nome dos arquivos de uma pasta de onde estou extraindo todos os dados?

    Se puder me ajudar 🙂

    • 21/02/2017 às 20:16

      Fala grande Regi, tudo bem contigo?
      Claro que é possível sim fazermos isso, basta utilizarmos variáveis e montarmos un insert com a tarefa de oledb command

      🙂

  1. 18/02/2014 às 14:33

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: