Contêiner Loop Foreach

O contêiner Loop Foreach define um fluxo de controle repetitivo em um pacote. A implementação de loop é semelhante à estrutura de loop Foreach em linguagens de programação. Em um pacote, o looping é habilitado por um enumerador Foreach. O contêiner Loop Foreach repete o fluxo de controle para cada membro de um enumerador especificado.

O SQL Server Integration Services fornece os seguintes tipos de enumerador:

  • Enumerador Foreach ADO para enumerar linhas em tabelas. Por exemplo, você pode obter as linhas em um conjunto de registros ADO.

  • O Enumerador de Conjunto de Linhas de Esquema ADO.NET Foreach enumera informações de esquema sobre uma fonte de dados. Por exemplo, você pode enumerar e obter uma lista das tabelas do banco de dados AdventureWorks2008R2 SQL Server.

  • Enumerador de Arquivo Foreach para enumerar arquivos em uma pasta. O enumerador pode desviar subpastas. Por exemplo, você pode ler todos os arquivos que têm extensão de nome de arquivo * .log na pasta e respectivas subpastas do Windows.

  • Enumerador Foreach de Variável para enumerar o objeto enumerável que uma variável especificada contém. O objeto enumerável pode ser uma matriz, um DataTable ADO.NET, um enumerador do Integration Services, e assim por diante. Por exemplo, você pode enumerar os valores de uma matriz que contém o nome de servidores.

  • Enumerador de Item Foreach para enumerar itens que são coleções. Por exemplo, você pode enumerar os nomes de executáveis e diretórios em funcionamento utilizados por uma tarefa Executar Processo.

  • Enumerador Nodelist Foreach para enumerar o conjunto de resultados de uma expressão Xpath (XML Path Language). Por exemplo, essa expressão enumera e obtém uma lista de todos os autores do período clássico: /authors/author[@period='classical'].

  • Enumerador SMO Foreach para enumerar objetos SQL Server Management Objects (SMO). Por exemplo, você pode enumerar e obter uma lista das exibições em um banco de dados do SQL Server.

O diagrama a seguir mostra um contêiner Loop Foreach que tem uma tarefa Sistema de Arquivos. O loop Foreach usa o enumerador de Arquivo Foreach e a tarefa Sistema de Arquivos é configurada para copiar um arquivo. Se a pasta que o enumerador especifica contiver quatro arquivos, o loop repetirá quatro vezes e copiará quatro arquivos.

Um contêiner Loop Foreach que enumera uma pasta

Você pode usar uma combinação de variáveis e expressões de propriedade para atualizar a propriedade do objeto de pacote com o valor de coleção do enumerador. Primeiro você mapeia o valor de coleção para uma variável definida pelo usuário e, depois, implementa uma expressão na propriedade que usa a variável. Por exemplo, o valor de coleção do enumerador de Arquivo Foreach é mapeado para uma variável denominada MyFile e, depois, a variável é usada na expressão de propriedade para a propriedade Subject de uma tarefa Enviar Email. Quando o pacote é executado, a propriedade Subject é atualizada com o nome de um arquivo cada vez que o loop é repetido. Para obter mais informações, consulte Usando expressões de propriedade em pacotes.

Variáveis mapeadas para o valor de coleção do enumerador também podem ser usadas em expressões e scripts.

Um contêiner Loop Foreach pode incluir várias tarefas e contêineres , mas só pode usar um tipo de enumerador. Se o contêiner Loop Foreach incluir várias tarefas, você poderá mapear o valor de coleção do enumerador para várias propriedades de cada tarefa.

Você pode definir um atributo de transação no contêiner Loop Foreach para definir uma transação para um subconjunto do fluxo de controle de pacotes. Deste modo, é possível gerenciar as transações em nível de Loop Foreach em vez de pacote. Por exemplo, se um contêiner Loop Foreach repetir um fluxo de controle que atualiza dimensões e tabelas de fato em um esquema de estrela, você poderá configurar uma transação para assegurar que todas as tabelas de fato sejam atualizadas com êxito, ou que nenhuma seja atualizada. Para obter mais informações, consulte Verificando a integridade dos dados usando transações.

Tipos de enumerador

Enumeradores são configuráveis, e você deve fornecer informações diferentes, dependendo do enumerador.

A tabela a seguir resume as informações que cada tipo de enumerador requer.

Enumerador

Requisitos de configuração

ADO Foreach

Especifique a variável de origem de objeto ADO e o modo do enumerador.

Conjunto de Linhas de Esquema ADO.NET Foreach

Especifique a conexão com um banco de dados e o esquema a ser enumerado.

Arquivo Foreach

Especifique uma pasta e os arquivos a serem enumerados, o formato do nome de arquivo dos arquivos recuperados, e se as subpastas devem ser desviadas.

Foreach de Variável

Especifique a variável que contém os objetos a serem enumerados.

Item Foreach

Defina os itens na coleção Itens Foreach, inclusive colunas e tipos de dados de coluna.

Nodelist Foreach

Especifique a origem do documento XML e configure a operação XPath.

SMO Foreach

Especifique a conexão com um banco de dados e os objetos SMO a serem enumerados.

Usando expressões de propriedade em contêineres Loop Foreach

É possível configurar pacotes para executar simultaneamente vários executáveis. Essa configuração deve ser usada com cautela quando o pacote incluir um contêiner Loop Foreach que implementa expressões de propriedade.

Geralmente é útil implementar uma expressão de propriedade para definir o valor da propriedade ConnectionString dos gerenciadores de conexões que os enumeradores Loop Foreach usam. A expressão de propriedade de ConnectionString é definida por uma variável que mapeia para o valor de coleção do enumerador e é atualizada a cada iteração do loop.

Para evitar consequências negativas do controle não determinante da execução paralela de tarefas no loop, o pacote deve ser configurado para executar só um executável de cada vez. Por exemplo, se um pacote puder executar várias tarefas simultaneamente; um contêiner Loop Foreach que enumera arquivos na pasta, recupera os nomes de arquivo e, depois, usa uma tarefa Executar SQL para inserir os nomes de arquivo em uma tabela podem gerar conflitos de gravação quando duas instâncias da tarefa Executar SQL tentarem gravar ao mesmo tempo. Para obter mais informações, consulte Usando expressões de propriedade em pacotes.

Configurando o contêiner Loop Foreach

Você pode definir propriedades com o Designer SSIS ou programaticamente.

Para obter mais informações sobre as propriedades que podem ser definidas no Designer do SSIS, clique em um dos seguintes tópicos:

Para obter mais informações sobre como definir essas propriedades no Designer SSIS, clique em um dos seguintes tópicos:

Configurando o contêiner Loop Foreach programaticamente

Para obter mais informações sobre como definir programaticamente essas propriedades, clique no seguinte tópico:

Recursos externos

Entrada de blog, SSIS For Each Node List Enumerator, em bidn.com.

Ícone do Integration Services (pequeno) Fique atualizado com o Integration Services

Para obter os downloads, artigos, exemplos e vídeos mais recentes da Microsoft, bem como algumas soluções da comunidade, visite a página do Integration Services no MSDN ou TechNet:

Para receber uma notificação automática sobre essas atualizações, assine os feeds RSS disponíveis na página.