当字段包含逗号字符时,我在SSIS中的批量插入失败。我的平面文件源是制表符分隔的,并且有许多实例,其中文本字段将包含逗号。例如,UserComment可能有逗号。这会导致批量插入失败。
如何告诉SSIS忽略逗号?我认为它会自动发生,因为行分隔符是{CR} {LF},列分隔符是“Tab”。它为什么用逗号表示?另请注意,我目前没有使用格式文件。
提前致谢。
更新
这是我在SSIS中遇到的错误:
批量插入任务中的错误:0xC002F304,批量插入任务:出现以下错误消息时出现错误:第183行第5列(EmailAddress)的批量加载数据转换错误(类型不匹配或指定代码页的无效字符) 。第182行,第5行(EmailAddress)的批量加载数据转换错误(类型不匹配或指定代码页的无效字符)。第181行第5列的批量加载数据转换错误(类型不匹配或指定代码页的无效字符)(电子邮件地址)。”。
任务失败:批量插入任务
似乎在记录131988上失败了,这就是为什么我认为这是因为没有空间的“东西,某事”电子邮件。 131988年之前的许多记录都很好。
131988 01 MEMPHIS, TN someone@somewhere.com
131988 02 NORTH LITTLE ROCK, AR someone@somewhere.com,someone1@somewhere1.com
131988 03 HOUSTON, TX someone@somewhere.com,someone1@somewhere1.com
答案 0 :(得分:1)
我怀疑逗号或@符号被称为“无效字符”。
我看到输入记录中有两个选项卡位于包含电子邮件地址的字段之前,因此电子邮件地址列将是第五列。但是当错误消息引用“第5列”时,它可能使用从零开始的索引,因此电子邮件列只是索引4.是否有选项卡和另一列?也许那里有无效的角色。
我怀疑在任何导致错误的列中都嵌入了一个看不见的坏字符。在剪切和粘贴电子邮件地址行时,我经常会收到不好的字符,这可能是个嫌疑人。
单独运行失败的行以确保它仍然失败。
然后将其复制到记事本中,并在“编码”设置为ANSI的情况下执行“另存为”。 (如果字符不正确,可能会抱怨。)使用“另存为”文件作为新的导入文件。此时,你应该能够合理地确信“你所看到的就是你得到的东西”,并且导入文件中没有嵌入不可见的字符。
如果这是问题,你需要一些方法来验证未来的导入文件是否干净,否则在导入过程中以某种方式处理它们。
(我认为你已经检查了目标列的长度是否正常。这绝对是一个显而易见的事。)
答案 1 :(得分:0)
“指定代码页的类型不匹配或无效字符”是一种误导性错误消息。源表的字段长度超出了目标表的指定长度,因此超出了错误。调整长度后,一切正常。