2014-09-03 67 views
0

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

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

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

所以我甚至不知道如何确定问题是什么。

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

目前我只是缺乏关于如何进一步调试的想法。

+0

像这样的时代,我拉出[XVI32](http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm)在数据中寻找gremlins。另一种选择是在.NET中编写一个快速解析器来尝试找到不匹配的行 – billinkc 2014-09-03 15:12:26

回答

0

你已经给了你的问题的答案;)

,如果我在文件中删除一行以上70962行,连第一行, 保存CSV文件,然后导入运行正常。

您在文件的某个地方有一个错误的分隔符。当您在违规行前删除任何数据时,分隔符的不匹配可能无法正确处理,只是保持打开状态直至文件的最后一段,然后程序将为您处理它。

检查上面提到的那一行上的行和列分隔符,以及那一行。

+0

上面的行看起来也很好。我不确定逻辑:当然,如果我删除第1行,并且第1行没有问题,那么错误仍然会出现? – Sean 2014-09-03 08:32:42

+0

如果在任何一行中有一个分隔符太多或丢失,删除不同的行可能有时会“抵消”这个,因为差异被“推送”到文件末尾。 – Tristan 2014-09-03 08:35:46

+0

直接在上面的行没有可辨别的问题,那么问题可以在以前的70961行中的任何一个上?我可以禁止它推送错误,并在相应的行上出现错误 - 即严格的分隔符检查? – Sean 2014-09-03 08:45:14