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 AlmeidaNesse 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.
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
- Representando dados em XML no SQL ServerSQL Server
- Diferenças entre SEQUENCES x IDENTITY no Microsoft SQL Server 2012SQL
- Utilizando FILETABLE no SQL Server 2012SQL Server
- NHibernate com o Delphi Prism: Acessando um Banco de Dados SQL ServerVisual Studio
- Novidades no SQL Server Codinome DenaliSQL Server