SSIS截断错误返回状态4

4
我正在尝试将来自Excel的文件导入到SQL表中。当我使用数据转换从Unicode字符串[DT_WSTR]转换为字符串[DT_STR]时,某些列会出现截断错误。以下是输出错误信息:
[数据转换[2]]错误:在将列“Contact Name”(187)转换为列“DataContactName”(105)时,数据转换失败。转换返回状态值4和状态文本“文本被截断或一个或多个字符在目标代码页中没有匹配项”。
因此,数据流以失败结束,但是一些行已被复制到SQL表中。是否有解决方法或解决方案?

2
这取决于您想要的解决方案是什么。您是否希望忽略错误,因为您对转换/截断感到满意,还是您想知道如何更改目标模式以避免错误,或者您想确保复制所有行或不复制任何行? - Jeroen Mostert
2个回答

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

I added ignore truncation errors in error output and all rows were copied in sql table. There was no problem to convert characters like ; or "á". Can u brief me what kind of errors i ignored?

我建议您在将失败设置从 Ignore Failure 更改为 Redirect Row 后,在错误输出上使用 Multi-cast 转换。然后将 Multi-cast 的一个输出插入到 SQL Server 中,另一个插入到平面文件目标中。这样,您就可以在 SQL Server 中获取数据,并在平面文件中分析错误。

我在错误输出中添加了忽略截断错误的功能,所有行都被复制到了SQL表中。转换像;或"á"这样的字符没有问题。您能否简要告诉我忽略了哪些类型的错误?非常感谢。 - DraganB

1

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


我忽略了错误,所有行都被复制到了SQL中。我检查了一下,字符转换没有问题,我不知道出了什么错误。将来我应该使用DT_TEXT而不是[DT_STR]吗? - DraganB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接