ForEach in SQLServer Integration Services
Integration Services has built in constructs that provide the ability to loop through a result set. This functionality can be used to loop through files in a directory, items returned from a query, or a list generated with another method.
One issue with the ForEach container, when using the default configuration, is that if one loop iteration fails the loop fails and processing stops. Below is a technique that can be used to log the error and proceed to the next value in the list.
The package shown uses a ‘ForEach File Enumerator’ to loop through a directory, in this example c:\temp. Three files exist in the directory that match the criteria. LoopDemo.txt, LoopReadOnly.txt, and LoopSequential.txt. LoopReadOnly.txt has the read only attribute set to true.
With the default options set for the ForEach loop construct the first file is deleted, LoopDemo.txt. When deletion on the second file is attempted, LoopReadOnly.txt, an error is produced and the loop fails after displaying the error.
By setting the ‘MaximumErrorCount’ to 0 on the ForEach container the failure will occur and the message displayed, however the loop will continue through the remaining file.
Errors produced by the task can be logged in any manner that is available, email notification, logging to a table etc.