【问题标题】:Strange/Inconsistent SSIS row import error奇怪/不一致的 SSIS 行导入错误
【发布时间】:2014-09-03 07:15:05
【问题描述】:

我正在使用 SSIS 将 csv 非 unicode 文件导入 SQL Server。我收到错误“文本被截断或一个或多个字符在目标代码页中不匹配”。它在第 70962 行的第 0 列中失败,该行的数据与其他行一样;第一列中的数据不会比它上面的行中的数据长。

我的第 0 列在平面文件连接和数据库中定义为 255 宽。第 70692 行(以及大多数其他行)中的数据为 17 个字符。

奇怪的是,如果我删除文件中第 70962 行上方的一行,甚至是第一行,并保存 csv 文件,那么导入运行正常。如果我替换删除的行并运行导入,它会再次失败。

所以我什至不确定如何确定问题所在。

如果我创建一个新的单列平面文件连接,我可以将整个文件导入到单列表中。但是,一旦我添加了第一列分隔符(即第二列),它就会在同一行上失败。

目前我只是不知道如何进一步调试。

【问题讨论】:

  • 这样的时候,我拉出XVI32 在数据中寻找gremlins。另一种选择是在 .NET 中编写一个快速解析器来尝试查找不匹配的行

标签: sql-server csv ssis


【解决方案1】:

您已经在问题中给出了答案;)

如果我删除文件中第 70962 行上方的一行,甚至是第一行,并且 保存 csv 文件,然后导入运行正常。

文件中某处的分隔符损坏。当您删除违规行之前的任何数据时,分隔符的不匹配可能没有得到正确处理,而只是保持打开状态,直到程序为您处理它的最后。

检查您提到的行和该行上方的行和列分隔符。

【讨论】:

  • 正上方的行看起来也不错。我不确定逻辑:如果我删除第 1 行,并且第 1 行没有问题,错误应该仍然出现?
  • 如果任何行中的分隔符过多或缺失,删除不同的行有时会“抵消”这一点,因为差异也会被“推”到文件末尾。
  • 正上方的行没有明显的问题,那么问题可能出在之前的 70961 行中的任何一行上吗?我可以禁用它来推送错误,并让它在适当的行上出错 - 即严格的分隔符检查?
  • 周围有一些 csv 文件“健康检查”工具,但只需将其粘贴到 excel 中并查看其混乱的位置通常会更快。放大 20% 时,您经常可以看到有问题的区域
  • 运气不好。就像大海捞针
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2012-06-29
  • 1970-01-01
相关资源
最近更新 更多