SSIS截断错误返回状态4

时间:2017-06-19 12:59:09

标签: sql-server ssis dataflow-diagram

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

  

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

因此数据流完成失败,但有些行被复制到sql table。 是否有一些解决方法或解决方案是什么?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这是你可以做的事情

  1. 如果您确定转换正确并且Excel不包含转换为非unicode / ASCII文本时丢失的任何字符,从而不会导致截断,请将您的失败设置从Failure on error更改为{ {1}}。虽然您一定要输出错误并记录到平面文件以检查丢失的数据。
  2. 检查数据表的列;是否足以保存每个可能的excel文件值?如果您不确定,请尝试将表列转换为VARCHAR(MAX)。如果由于大小原因,您现在不应该出现截断错误。其他方法是简单地选择VARCHAR(N)的目标大小,其中N = 2 * excel列的最大长度。
  3. 关于你的评论:

      

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

    我建议您在将故障设置更改为Ignore on errorIgnore Failure后,对错误输出使用多播转换。然后将Multi-cast中的一个输出插入到SQL Server中,将其他输出插入到平面文件目标中。这样你就可以在平面文件中将数据导入SQL服务器以分析错误