Condividi tramite


Contenitore Ciclo Foreach

Il contenitore Ciclo Foreach definisce un flusso di controllo ripetuto all'interno di un pacchetto. L'implementazione del ciclo è simile alla struttura del ciclo Foreach nei linguaggi di programmazione. In un pacchetto per l'esecuzione del ciclo viene utilizzato un enumeratore Foreach. Il contenitore Ciclo Foreach ripete il flusso di controllo per ogni membro di un enumeratore specificato.

In SQL Server Integration Services sono disponibili i tipi di enumeratori seguenti:

  • Foreach ADO Enumerator, per enumerare righe nelle tabelle. Consente ad esempio di ottenere le righe in un recordset ADO.

  • Foreach ADO.NET Schema Rowset Enumerator, per enumerare le informazioni dello schema relative a un'origine dei dati. Consente ad esempio di enumerare e ottenere un elenco delle tabelle presenti nel database AdventureWorks2008R2 di SQL Server.

  • Foreach File Enumerator, per enumerare i file contenuti in una cartella. È possibile includere nell'enumerazione anche le sottocartelle. È ad esempio possibile leggere tutti i file con estensione log presenti nella cartella di Windows e nelle relative sottocartelle.

  • Foreach From Variable Enumerator, per enumerare gli oggetti enumerabili contenuti in una variabile specificata. L'oggetto enumerabile può essere costituito da una matrice, da un oggetto DataTable ADO.NET, da un enumeratore di Integration Services e così via. È ad esempio possibile enumerare i valori di una matrice che contiene i nomi dei server.

  • Foreach Item Enumerator, per enumerare elementi costituiti da raccolte. È ad esempio possibile enumerare i nomi degli eseguibili e delle directory di lavoro utilizzate dall'attività Esegui processo.

  • Foreach Nodelist Enumerator, per enumerare il set di risultati di un'espressione XPath (XML Path Language). L'espressione seguente consente ad esempio di enumerare e ottenere un elenco di tutti gli autori del periodo classico: /authors/author[@period='classical'].

  • Foreach SMO Enumerator, per enumerare oggetti SMO (SQL Server Management Objects). Consente ad esempio di enumerare e ottenere un elenco delle viste presenti in un database di SQL Server.

Nella figura seguente viene illustrato un contenitore Ciclo Foreach che include un'attività File system. Il ciclo Foreach utilizza Foreach File Enumerator e l'attività File system è configurata per la copia di un file. Se la cartella specificata dall'enumeratore contiene quattro file, il ciclo si ripeterà quattro volte e copierà quattro file.

Contenitore Foreach Loop per l'enumerazione di una cartella

È possibile utilizzare una combinazione di variabili ed espressioni di proprietà per aggiornare la proprietà dell'oggetto pacchetto con il valore della raccolta dell'enumeratore. È innanzitutto necessario mappare il valore della raccolta a una variabile definita dall'utente e quindi implementare un'espressione di proprietà sulla proprietà che utilizza la variabile. Si supponga, ad esempio, che il valore della raccolta di Foreach File Enumerator sia mappato a una variabile di nome MyFile e che tale variabile venga utilizzata nell'espressione di proprietà per la proprietà Subject di un'attività Invia messaggi. Durante l'esecuzione del pacchetto la proprietà Subject viene aggiornata con il nome di un file a ogni ripetizione del ciclo. Per ulteriori informazioni, vedere Utilizzo delle espressioni di proprietà nei pacchetti.

Le variabili mappate al valore della raccolta dell'enumeratore possono essere utilizzate anche in espressioni e script.

Un contenitore Ciclo Foreach può includere più attività e contenitori, ma può utilizzare un solo tipo di enumeratore. Se il contenitore Ciclo Foreach include più attività, sarà possibile mappare il valore della raccolta dell'enumeratore a più proprietà di ogni attività.

È possibile impostare un attributo di transazione per ogni contenitore Ciclo Foreach per definire una transazione per un subset del flusso di controllo del pacchetto. In questo modo è possibile gestire le transazioni a livello di ciclo Foreach, anziché a livello di pacchetto. Se ad esempio un contenitore Ciclo Foreach ripete un flusso di controllo che aggiorna le tabelle delle dimensioni e dei fatti in uno schema star, sarà possibile configurare una transazione per garantire che vengano aggiornate tutte le tabelle dei fatti oppure nessuna. Per ulteriori informazioni, vedere Verifica dell'integrità dei dati tramite transazioni.

Tipi di enumeratori

Gli enumeratori sono configurabili ed è necessario specificare informazioni diverse a seconda dell'enumeratore.

Nella tabella seguente vengono riepilogate le informazioni richieste da ogni tipo di enumeratore.

Enumeratore

Requisiti di configurazione

Foreach ADO

Specificare la variabile di origine dell'oggetto ADO e la modalità dell'enumeratore.

Foreach ADO.NET Schema Rowset

Specificare la connessione a un database e lo schema da enumerare.

Foreach File

Specificare una cartella, i file da enumerare e il formato del nome dei file recuperati e indicare se includere le sottocartelle nell'enumerazione.

Foreach From Variable

Specificare la variabile che contiene gli oggetti da enumerare.

Foreach Item

Definire gli elementi nella raccolta di Foreach Item Enumerator, comprese le colonne e i tipi di dati delle colonne.

Foreach Nodelist

Specificare l'origine del documento XML e configurare l'operazione XPath.

Foreach SMO

Specificare una connessione a un database e gli oggetti SMO da enumerare.

Utilizzo di espressioni di proprietà in contenitori Ciclo Foreach

Un pacchetto può essere configurato in modo da eseguire più eseguibili contemporaneamente. Questo tipo di configurazione deve essere tuttavia utilizzato con cautela, se il pacchetto include un contenitore Ciclo Foreach che implementa espressioni di proprietà.

È spesso consigliabile implementare un'espressione di proprietà per impostare il valore della proprietà ConnectionString delle gestioni connessioni utilizzate dagli enumeratori del ciclo Foreach. L'espressione di proprietà di ConnectionString viene impostata da una variabile mappata al valore della raccolta dell'enumeratore e viene aggiornata a ogni iterazione del ciclo.

Per evitare le conseguenze negative della temporizzazione non deterministica dell'esecuzione parallela delle attività nel ciclo, è possibile configurare il pacchetto in modo da eseguire un solo eseguibile alla volta. Se ad esempio un pacchetto che può eseguire più attività contemporaneamente include un contenitore Ciclo Foreach che enumera i file in una cartella, recupera i nomi dei file e quindi utilizza un'attività Esegui SQL per inserire i nomi dei file in una tabella, quando due istanze dell'attività Esegui SQL tentano di scrivere contemporaneamente nella tabella potrebbero verificarsi conflitti di scrittura. Per ulteriori informazioni, vedere Utilizzo delle espressioni di proprietà nei pacchetti.

Configurazione del contenitore Ciclo Foreach

È possibile impostare le proprietà tramite Progettazione SSIS o a livello di programmazione.

Per ulteriori informazioni sulle proprietà che è possibile impostare in Progettazione SSIS, fare clic su uno degli argomenti seguenti:

Per ulteriori informazioni sulle procedure per l'impostazione di queste proprietà in Progettazione SSIS, fare clic su uno degli argomenti seguenti:

Configurazione del contenitore Ciclo Foreach a livello di programmazione

Per ulteriori informazioni sull'impostazione di queste proprietà a livello di programmazione, fare clic sull'argomento seguente:

Risorse esterne

Intervento nel blog sull'enumeratore SSIS For Each Node List, disponibile su bidn.com.

Icona di Integration Services (piccola) Rimanere aggiornati con Integration Services

Per informazioni sui download, gli articoli, gli esempi e i video Microsoft più recenti, nonché sulle soluzioni selezionate dalla community, visitare la pagina Integration Services su MSDN o TechNet:

Per ricevere notifiche automatiche su questi aggiornamenti, sottoscrivere i feed RSS disponibili nella pagina.