foreach循环容器中的SSIS XML Source

时间:2018-02-02 14:42:53

标签: sql-server xml foreach ssis

我有一个带有foreach循环的SSIS包。 foreach循环并读取文件。文件名放在Variable User :: FileName(索引0)中。

Forech container

我的数据流任务只是一个XML源和Ole DB目的地。

Data Flow task

User :: Filename通过" XML文件从变量"

传递给XML源

enter image description here

我使用内联架构,这是有效的(afaiks)。

运行包时,出现此错误:

  

[XML Source [50]]错误:System.Collections.Generic.KeyNotFoundException:De gegeven sleutel是het woordenboek中的niet aanwezig。      bij System.Collections.Generic.Dictionary`2.get_Item(TKey key)      bij Microsoft.SqlServer.Dts.Pipeline.DtsDataTableCollection.AssociateTablesWithBuffers(IDTSOutputCollection100输出,IDTSBufferManager100 bufferManager,Int32 localeID,DataSet dataSet)      bij Microsoft.SqlServer.Dts.Pipeline.DtsDataTableCollection..ctor(XmlSourceAdapter xmlSourceAdapter,IDTSOutputCollection100输出,Int32 localeID,DataSet数据集,IDTSBufferManager100 bufferManager)      bij Microsoft.SqlServer.Dts.Pipeline.XmlSourceAdapter.PreExecute()      bij Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostPreExecute(IDTSManagedComponentWrapper100 wrapper)

我的档案中没有TKey。

当我使用xsd运行此包时,不会生成错误,但不会读取任何行。

删除foreach容器时,只需指向一个带有"内联架构的文件"读取所有行并且不生成错误。但是,我不想为每个文件制作数据流......

我不知所措。有人可以帮我解决一下吗?一种调试此错误的方法?搜索的一般方向?

Visual Studio 2010。

1 个答案:

答案 0 :(得分:0)

您的数据流任务期望列TKey存在于您的XML源文件中。

您循环的至少一个文件不包含此列。这就是你得到错误的原因。既然你说文件都是一样的,那么大概没有这个文件有这个列。

在这种情况下,一种解决方案是从数据流预期的列中取出TKey列。