【问题标题】:SSIS Text was truncated with status value 4SSIS 文本被截断,状态值为 4
【发布时间】:2011-04-04 21:37:49
【问题描述】:

我正在开发一个 SSIS 包,试图从 CSV 平面文件更新现有的 SQL 表。除一列外,所有列均已成功更新。如果我在截断时忽略此列,我的包将成功完成。所以我知道这是一个截断问题而不是错误。

该列几乎对于每一行都是空的。但是,有几行此字段为 200-300 个字符。我的数据转换任务将此字段标识为 DT_WSTR,但从我在其他地方读到的内容来看,这可能应该是 DT_NTEXT。我都试过了,我什至将 DT_WSTR 设置为 500。但这都没有解决我的问题。我该如何解决?这个列在我的 SQL 表中应该是什么数据类型?

Error: 0xC02020A1 at Data Flow Task 1, Source - Berkeley812_csv [1]: Data conversion failed. The data conversion for column "Reason for Delay in Transition" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.".
Error: 0xC020902A at Data Flow Task 1, Source - Berkeley812_csv [1]: The "output column "Reason for Delay in Transition" (110)" failed because truncation occurred, and the truncation row disposition on "output column "Reason for Delay in Transition" (110)" specifies failure on truncation. A truncation error occurred on the specified object of the specified component.
Error: 0xC0202092 at Data Flow Task 1, Source - Berkeley812_csv [1]: An error occurred while processing file "D:\ftproot\LocalUser\RyanDaulton\Documents\Berkeley Demographics\Berkeley812.csv" on data row 758.

【问题讨论】:

    标签: text csv ssis


    【解决方案1】:

    此错误的一个可能原因是您的分隔符(逗号、分号、竖线等)实际上出现在数据中的一列中。这可能会给出非常具有误导性的错误消息,通常带有完全不同的列的名称。

    检查这一点的一种方法是将“坏”行重定向到单独的文件,然后手动检查它们。以下是有关如何执行此操作的简要说明:

    http://redmondmag.com/articles/2010/04/12/log-error-rows-ssis.aspx

    如果这确实是您的问题,那么最好的解决方案是在源处修复文件以引用数据值和/或使用不在数据中的不同分隔符。

    【讨论】:

    【解决方案2】:

    我之前遇到过这个问题,可能是文件的默认列大小不正确。它将默认大小为 50 个字符,但您正在使用的数据更大。在数据文件的高级设置中,将列大小从 50 调整为表的列大小。

    【讨论】:

      【解决方案3】:

      我怀疑 或目标代码页中的一个或多个字符不匹配 部分错误。

      如果删除该列中具有值的行,它会加载吗? 换句话说,你能识别导致包失败的行吗? 可能是数据太长,也可能是其中有一些 SQL Server 不喜欢的时髦字符。

      【讨论】:

      • Beth,就像我上面所说的,当我忽略这一列的截断时,所有这些记录都被更新了。
      • 好的,所以您已经查看了这些行,并没有发现它们有任何异常。它可能是长度。您可以手动将数据从失败的行之一复制到表中吗?它可能会给你一个更有意义的错误信息。
      • 如何将这些失败行的数据从 Excel 复制到 SQL?
      • 写一个插入语句。这个想法是让它在 SSIS 之外工作。 SQL 可能会给您更好的消息,或者至少隔离问题以进行测试。
      • 对不起贝丝;我知道如何为 SQL 数据编写插入语句,但不知道如何为 Excel 编写插入语句。我该怎么做?
      【解决方案4】:

      如果这是来自 SQL Server 导入向导,请尝试在数据源上编辑列的定义,默认为 50 个字符,但可以更长。

      Data Soruce -> Advanced -> Look at the column that goes in error -> change OutputColumnWidth to 200 and try again.

      【讨论】:

        【解决方案5】:

        我之前也遇到过这个问题,你可以到“选择数据源”页面的“高级”选项卡,点击“建议类型”按钮,然后根据需要设置“行数”。之后,将类型和文本限定为真值。

        我应用了上述解决方案,可以将我的数据转换为 SQL。

        【讨论】:

          【解决方案6】:

          就我而言,我的某些行与标题的列数不同。例如,标题有 10 列,而您的行中有 8 或 9 列。 (列 = 计算每行中分隔符的数量)

          【讨论】:

            【解决方案7】:

            如果所有其他选项均失败,请尝试重新创建数据导入任务和/或连接管理器。如果您在最初创建任务后进行了任何更改,这有时可以解决问题。我知道这相当于重新启动,但是,嘿,如果它有效,它就有效。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-05-01
              • 2021-12-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-12-07
              • 2020-02-02
              相关资源
              最近更新 更多