4

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

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

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

4

2 回答 2

4

这是你可以做的

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

关于您的评论:

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

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

于 2017-06-19T13:18:50.960 回答
1

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

于 2017-06-19T13:08:09.483 回答