Foreach Loop Failing to Retrieve Element

  • Hi all, I am stuck at figuring out why the following parameters for an Execute SQL Task and Foreach Loop Container are not right. This format is almost identical to a book I am reading but it is not working! The variables themselves are scoped to the package and everything else here seems correct but being new to SSIS I am not understanding the errors which are:

    Error: 0xC002410D at Foreach Loop Container: The enumerator failed to retrieve element at index "1".

    Error: 0xC001C012 at Foreach Loop Container: ForEach Variable Mapping number 1 to variable "User::sDbName"

    cannot be applied.

    I know that the SQL statement outputs all of the rows that I want because I built it and the SQL Task completes successfully but the Foreach Loop stops. There are only 26 rows from this table for now so I know that the enumerator should have been able to retrieve the element at index 1 but for some reason it does not. Any ideas? I've been stuck on this for a bit now and really don't understand why it isn't working.

    Execute SQL Task

    General:

    ResultSet = Full result set

    SQL Statement:

    ConnectionType = OLE DB

    Connection = MICHAEL-PC.EconAnalysis

    SQLSourceType = Direct input

    SQLStatement =

    SELECT Table_Links FROM dbo.tblLinks

    BypassPrepare = True

    No Parameter Mapping

    Result Set:

    Result Name = 0

    Variable Name = flObj (of Object datatype)

    No Expressions

    Foreach Loop Container

    Collection:

    Enumerator = Foreach ADO Enumerator

    ADO object source variable = User::flObj

    Rows in first table selected

    Variable Mappings:

    Variable = User::sDbName

    Index = 1

    Regards:
    Mordred
    Keep on Coding in the Free World

  • I believe your mapping should be index 0.

  • Daniel Bowlin (8/2/2012)


    I believe your mapping should be index 0.

    Yes it should

    Jason...AKA CirqueDeSQLeil
    _______________________________________________
    I have given a name to my pain...MCM SQL Server, MVP
    SQL RNNR
    Posting Performance Based Questions - Gail Shaw[/url]
    Learn Extended Events

  • I'm loading my package as I type this and am curious as to why internet examples as well as the book I am reading set the mapping index to 1? I understand coded for loops but this container confuses me a bit. Doesn't setting the index to 1 make it iterate 1 record at a time? I guess I'm just not fully understanding how the container iterates.

    EDIT: Also, if I want to store each output from my query in a variable (in the Variable Mappings section), should that variable be of String type or Object Type? The loop works now but the Script task I have is failing with the following errors:

    Error: 0x1 at Script Task: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Microsoft.SqlServer.Dts.Runtime.DtsRuntimeException: The element cannot be found in a collection. This error happens when you try to retrieve an element from a collection on a container during execution of the package and the element is not there.

    There was a lot from the error output that I could have added but I didn't think it was all necessary.

    Regards:
    Mordred
    Keep on Coding in the Free World

  • The index value is the column position of the recordset you are looping. You want the first column so the index is 0.

    Jason...AKA CirqueDeSQLeil
    _______________________________________________
    I have given a name to my pain...MCM SQL Server, MVP
    SQL RNNR
    Posting Performance Based Questions - Gail Shaw[/url]
    Learn Extended Events

  • Thanks sqlrnnr, that helps my understanding a lot. Much appreciated.

    Regards:
    Mordred
    Keep on Coding in the Free World

  • I meant to ask, how or where do I assign the record or element from that column so that I can access it via script in the Foreach loop?

    Regards:
    Mordred
    Keep on Coding in the Free World

  • You are assigning the value to your variable User::sDbName, that is what you should use inside the FE Loop.

  • Thank you for that Daniel. Thank you to everyone else too.

    Regards:
    Mordred
    Keep on Coding in the Free World

Viewing 9 posts - 1 through 8 (of 8 total)

You must be logged in to reply to this topic. Login to reply