Banco de Dados - SQL Server

Foreach Loop Container Task

Veja como o Foreach Loop Container pode ser utilizado para percorrer arquivos de uma pasta fazendo a carga de arquivos dinamicamente.

por Lucas Almeida



Nesse artigo vou demonstrar como utilizar a Task Foreach Loop Container. Essa Task é muito útil em situações onde é necessário percorrer uma pasta para fazer carga de arquivos.

A Foreach Loop container that enumerates a folder

O nosso exemplo apenas vai percorrer uma pasta lendo o nome dos arquivos e mostrando o nome de cada um é uma janela de mensagem.

O figura abaixo mostra o cenário inicial exemplo.

1 – Pacote onde faremos o exemplo com um Foreach Loop Container com um Data Flow Task e um Script Task.

2 – Menu de contexto com algumas opções que poucos conhecem onde vamos clicar na opção Variables para abrir a caixa de criação de variáveis

3 – Caixa de criação de variáveis. Não tem muita coisa nessa caixa apenas o nome da variável e o escopo da variável. O escopo é definido ao criar a variável e não pode ser alterado. O escopo é atribuído à variável quando clicamos no botão para adicionar a variável e depende do objeto selecionado quando esse botão é clicado.

4 – Solution com o projeto inicial.

5 – Propriedades. Deixe essa janela aberta ao criar as variáveis porque é nela que você pode alterar as propriedades da variável (Ex.: tipo e valor inicial)

Para iniciar crie um novo projeto Integration Services e adicione um novo pacote.

No pacote criado adicione um Foreach Loop Container Task e dentro do Foreach adicione um Data Flow Task ligado a um Script Task.

Clique com o botão direito em qualquer lugar no pacote e clique na opção variável.

Na janela de variáveis adicione uma variável chamada NomeArquivo e na janela de propriedades altere o Value Type da variável para String

Dê dois cliques no Foreach Loop Container Task para abrir a janela de configuração.

Altere o caminho da pasta para “C:\Temp” (Crie essa pasta na sua máquina caso não exista).

Altere o tipo dos arquivos para “*.txt”.


Na guia Variable Mappings selecione a variável User::NomeArquivo na coluna Variable.

O Index 0 mapeia o resultado do primeiro (e único) enumerador do Foreach.

Clique em ok.

Dê duplo clique sobre o Scrip Task para abrir a janela de configuração.

Na opção ReadOnlyVariables digite o nome da variável NomeArquivo criada. Ela estará disponível apenas para leitura dentro do script.

Clique em Design Script para escrevermos um pequeno código VB.NET

Imports System

Imports System.Data

Imports System.Math

Imports System.Windows.Forms

Imports Microsoft.SqlServer.Dts.Runtime

Public Class ScriptMain

    Public Sub Main()

        MsgBox("O arquivo lido foi: " & Dts.Variables("NomeArquivo").Value.ToString())

        Dts.TaskResult = Dts.Results.Success

    End Sub

End Class

Clique no menu File > Close and Return

Dê um duplo clique no Data Flow e adicione um Flat File Source ligado a um OLE DB Destination.

Adicione um Flat File Connection no Connection Managers e o renomeie para “Arquivos”.

Adicione um OLE DB Connection no Connection Managers e ligue-o à base de dados SQL Server onde os arquivos serão carregados.

Abra a janela de propriedades e selecione o Flat File Connection Arquivos no Connection Manager.

Na propriedade Expressions clique nos 3 pontos para abrir a caixa de dialogo.

Selecione “Connection String” em property e clique nos 3 pontos para montar a expressão.

Na lista de variáveis selecione User::NomeArquivo e arraste até a caixa de texto Expression.

Clique em OK.

Clique em OK novamente.

Salve o pacote e execute.


Conclusão

Esse exemplo apenas lê os arquivos e mostra o nome de cada um deles.

Essa opção de exibir uma mensagem via Stript Task não funciona se você tentar executar o pacote via JOB do SQL Server. A única forma de você visualizar a mensagem é executando o projeto via Business Intelligence Development Studio.

Até o próximo artigo!

Lucas Almeida

cyruslma@hotmail.com

MSDN – SQL Server Business Intelligence

Lucas Almeida

Lucas Almeida - Microsoft Most Valuable Professional na categoria SQL Server.
Ministra treinamentos de SQL Server, Analysis Services, Integration Services e Reporting Services. É autor de artigos técnicos, webcasts e palestrante em eventos da Microsoft.
Atualmente trabalha como Consultor de Business Intelligence para a
Carpio do Brasil, atuando também como consultor independente em projetos de Banco de Dados SQL Server, Business Intelligence e Desenvolvimento .NET.
MCITP: Database Administrator
MCTS: SQL Server 2005 Business Intelligence
MCTS: .NET Framework 2.0 Web Applications
MCTS: .NET Framework 2.0 Distributed Applications