【问题标题】:SSIS Foreach loop error on CSV filesCSV 文件上的 SSIS Foreach 循环错误
【发布时间】:2017-10-18 13:32:56
【问题描述】:

是的,所以我有一个 foreach 循环,其中的数据流通过一组格式完全相同的文件。这改变了派生列的一些事情,所有这些都被转储到 SQL Server 数据库中,该数据库将成为我的临时表。

问题是即使文件的格式都相同,某些文件也会引发错误,错误总是在日期附近。它将毫无问题地遍历 4 个文件,然后在第 5 个文件停止工作。

我想做什么?

  • 我想获取大量具有相同格式的文件,并将其中的数据放入 SQL 数据库,同时更改某些格式。

我尝试过做什么?

  • 我尝试将日期重新格式化为 dd/mm/yyyy,这是我希望日期具有的格式。 重新格式化有效,但随后在出现类型转换错误之前出现错误的同一文件。

这是我得到的错误: [OLE DB 目标 [59]] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0” Hresult:0x80004005 描述:“转换规范的字符值无效”。

[OLE DB Destination [59]] 错误:OLE DB Destination.Inputs[OLE DB Destination Input].Columns[Amount] on OLE DB Destination.Inputs[OLE DB Destination Input] 出现错误。返回的列状态为:“由于可能丢失数据,无法转换该值。”。

[OLE DB 目标 [59]] 错误:SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “OLE DB Destination.Inputs[OLE DB Destination Input]”失败,因为发生了错误代码 0xC0209077,并且“OLE DB Destination.Inputs[OLE DB Destination Input]”上的错误行处置指定错误时失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

*[SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。处理输入“OLE DB 目标输入”(72) 时,组件“OLE DB 目标”(59) 上的 ProcessInput 方法失败,错误代码为 0xC0209029。已识别的组件从 ProcessInput 方法返回错误。该错误是特定于组件的,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。 *

以前发生过这种情况,我通过创建一个新的 foreach 循环来处理具有新格式的新文件来解决它(我看不到格式有任何变化,但它继续进行)。

这是数据流的格式:

这是派生列的图像

任何帮助将不胜感激!如果您需要我澄清任何事情,请告诉我。

【问题讨论】:

  • 它似乎指的是不同的列:Columns[Amount]。这是什么专栏?
  • 这是一个货币列,我只是再次检查以确保有效文件和无效文件之间的格式没有区别
  • 一个货币价值通过而另一个货币价值失败的例子是什么?
  • 它会很高兴地通过 1126.97 但不是 1148.58,这是 CSV 中第一个失败的。
  • 目标列的数据类型是什么?您是否尝试过在“编辑列显示”和“OLE DB 目标”之间启用数据查看器?

标签: sql-server database date ssis derived-column


【解决方案1】:

您的列的顺序似乎不同。我用管道替换了标签,得到了以下结果:

工作:

Staffordshire County Council|Staffordshire County Council Other|247 Cars Willenhall Ltd 15/06/2017|1126.97|Transport - Escorts|Transport - Escorts|opendatacommunities.org/id/county-council/staffordsh‌​ire

不工作:

Staffordshire County Council|Childrens Services SEND|247 Cars Willenhall Ltd|273.42|06/07/2017|Transport - Escorts|Transport - Escorts opendatacommunities.org/id/county-council/staffordsh‌​ire

在第一个中,日期位于金额的另一侧,并且似乎包含在“247 Cars Willenhall Ltd”字符串中。

如果您通过右键单击最后两个组件之间的箭头并选择该选项来启用数据查看器,您将清楚地了解这如何影响您的数据流(在运行/调试包时)。

【讨论】:

  • 谢谢,我只需要更改 CSV 文件中的标题或其他任何内容即可使其正常工作吗?
  • 好吧,不管你采取什么路线,你只需要确保文件之间的一致性,所以相同的列以相同的顺序,使用你选择的任何分隔符(在这种情况下是选项卡)。这个例子的有趣之处在于 Amounts 似乎两次都在第 4 个字段中,但那会引发错误(至少是您发布的那个)。在此运行数据查看器以查看到底发生了什么会很有趣。
  • 好的,所以我尝试在 excel 中编辑它,将所有内容交换到正确的位置,但仍然不行。出现完全相同的错误。我确信这就是原因!
  • 你能把文件的那几行再发一遍吗?可能还有一些关于平面文件源配置方式的信息或屏幕截图。
  • 对,所以我发现我在 excel 文件的末尾有大量随机空白,并摆脱了那些排序的问题,再次感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多