【问题标题】:SSIS Package failing, not redirecting error rowsSSIS 包失败,不重定向错误行
【发布时间】:2020-01-20 06:47:16
【问题描述】:

我们有一个 SSIS 包,用于将数据从 CSV 平面文件导入到 SQL Server 上的表中。该文件由数百行数据组成,这些数据由逗号 (,) 分隔,文本数据由双引号 (") 限定,但并非所有文本列都由双引号限定。当字符串不是引号 (") 限定包含逗号 (,)。这会导致包失败并出现以下错误

[源数据 [130]] 错误:未找到列“ColumnX”的列分隔符。

我试图将坏行重定向到另一个平面文件目标,但包没有重定向坏行,但它失败了

【问题讨论】:

  • SSIS 将无法重定向该行,因为该行格式错误。如果您有一个 isn't 引用标识并且确实包含逗号的值,那么对于任何 CSV 阅读器,它看起来就像该行有一个额外的列。问题不是 SSIS,而是您的文件,您需要修复它,以便正确引用包含逗号的值。
  • @Larnu:是的,我手动删除了逗号并处理了文件,但这不是日常处理的理想解决方案。
  • 这不是手动修复,生成此文件的上游系统应该应用此修复
  • 正如@RaunakJhawar 所说,不应该是您手动修复文件,您(或负责人)应该修复创建文件的过程。错误在于文件生成,而不是导入,因为尝试导入的文件格式错误。

标签: sql-server ssis ssis-2012


【解决方案1】:

如果您找不到生成文件的人来修复它,您唯一的编程解决方案是编写一个脚本任务,在文件进入数据流之前修复它。

脚本需要分析每一行以查看其逗号数量是否正确,并在字段周围添加引号。如果它发现一个逗号太多,它必须应用一些逻辑(只有你可以确定)来确定哪个逗号不是列分隔符,并确保逗号被删除或包含在引用的字段值中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2019-03-30
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多