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.

    Con la destinazione recordset è possibile salvare i dati in memoria in un recordset archiviato in una variabile del pacchetto il cui tipo di dati è Object. In genere si utilizza un contenitore Ciclo Foreach con l'enumeratore Foreach ADO per elaborare una riga del recordset alla volta. Il tipo di dati della variabile specificata per l'enumeratore Foreach ADO deve essere Object. Per ulteriori informazioni sulla destinazione recordset, vedere Utilizzo di una destinazione recordset.

  • 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 AdventureWorks2012 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 eseguire il mapping del 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 sul valore della raccolta di Foreach File Enumerator venga eseguito il mapping 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 sulle quali viene eseguito il mapping 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 eseguire il mapping 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 Transazioni di Integration Services.

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. Il tipo di dati della variabile deve essere Object.

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.

Espressioni di proprietà nei 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 sulla quale viene eseguito il mapping 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.

Attività correlate

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

Per informazioni dettagliate sull'impostazione di queste proprietà in Progettazione SSIS, fare clic su uno degli argomenti seguenti:

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

Contenuto correlato

Intervento nel blog relativo all'enumeratore Foreach Nodelist in SSIS sul sito Web bidn.com.

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

Per informazioni sui download, sugli articoli, sugli esempi e sui video Microsoft più recenti, nonché sulle soluzioni selezionate dalla community, visitare la pagina relativa a Integration Services sul sito MSDN:


Per ricevere notifica automatica su questi aggiornamenti, sottoscrivere i feed RSS disponibili nella pagina.

Vedere anche

Concetti

Flusso di controllo

Contenitori in Integration Services