【问题标题】:SSIS truncated error returned status 4SSIS 截断错误返回状态 4
【发布时间】:2017-06-19 12:59:09
【问题描述】:

我正在尝试将文件从 Excel 导入到 SQL table。当我通过数据转换从 unicode string[DT_WSTR] 转换为 string[DT_STR] 时,我在某些列上出现截断错误。这是输出错误:

[数据转换 [2]] 错误:将列“联系人姓名”(187) 转换为列“数据联系人姓名”(105) 时数据转换失败。转换返回状态值 4 和状态文本“文本被截断或目标代码页中有一个或多个字符不匹配。”。

所以数据流以失败告终,但有些行被复制到sql table。 是否有一些解决方法或解决方案?

【问题讨论】:

  • 这取决于您想要的解决方案。您是否想忽略错误,因为您对转换/截断没有问题,或者您想知道如何更改目标架构以避免错误,或者您想确保复制所有行或不复制所有行他们是?

标签: sql-server ssis dataflow-diagram


【解决方案1】:

你可以这样做

  1. 如果您确定转换正确并且 Excel 不包含任何在转换为非 unicode/ASCII 文本时丢失的字符,因此不会导致截断,请将您的失败设置从 Failure on error 更改为 Ignore on error .尽管您绝对应该将错误输出并记录到平面文件中以检查丢失的数据。
  2. 检查数据表的列;保存所有可能的 excel 文件值是否足够?如果不确定,请尝试将表列转换为 VARCHAR(MAX)。如果它是由于大小造成的,您现在不应该收到截断错误。另一种方法是简单地为 VARCHAR(N) 选择目标大小,其中 N=2*excel 列的最大长度。

关于您的评论:

我在错误输出中添加了忽略截断错误,并且所有行都复制到了 sql 表中。转换像 ; 这样的字符没有问题或“á”。你能告诉我我忽略了什么样的错误吗?

我建议您在将失败设置从Ignore Failure 更改为Redirect Row 后对错误输出使用多播转换。然后将 Multi-cast 的输出之一插入 SQL 服务器,并将其他输出插入平面文件目标。这样您就可以将数据导入 SQL Server 以及平面文件中以分析错误

【讨论】:

  • 我在错误输出中添加了忽略截断错误,并且所有行都复制到了 sql 表中。转换像 ; 这样的字符没有问题或“á”。你能告诉我我忽略了什么样的错误吗?非常感谢。
【解决方案2】:

看起来在数据转换中为 DataContactName 定义的长度小于“联系人姓名”的长度。检查“联系人姓名”列的最大长度,并根据此设置 DataContactName 大小。您看到插入的行数很少,因为它们可能是在更大长度的数据到达之前插入的。

【讨论】:

  • 我忽略了错误,所有行都复制到了 sql。我检查了,字符转换没有问题,我不知道是什么错误。以后我应该使用 DT_TEXT 而不是 [DT_STR] 吗?
猜你喜欢
  • 2011-04-04
  • 2013-06-29
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
  • 2018-10-07
  • 1970-01-01
  • 2017-06-22
相关资源
最近更新 更多