我在BIDS工作(SSIS 2008)。我有一个非常简单的数据流任务,将平面文件导入OLE DB表。平面文件有10列,它们都映射到表中的相应列。平面文件列分隔符是管道符,行分隔符是{CR} {LF},并且它没有标题。在平面文件源上,我将Error和Truncation上的违规行(对于所有10列)重定向到错误输出平面文件。
我每天都运行这个数据流任务,但我不能保证平面文件每个记录总是有10列。因此,因为SSIS有使用行分隔符作为最后定义列的列分隔符的坏习惯(至少在我看来),它会尝试合并行。这意味着如果我的列数不足,那么并非所有行都将作为单独的行导入到表中。这也意味着违规行不一定会写入错误输出平面文件。
目前,仅有的两种情况是:(1)文件将具有所需的列数;(2)文件将缺少列数。我还没有看到一个包含比预期更多的列的文件。由于此文件用于我的单元测试过程,因此我不想预先处理文件以获得正确的列数。我希望有问题的行写入错误输出平面文件(或者,如果不是错误输出平面文件),至少要写入其他平面文件而不导入。我仍然希望导入具有正确列数的行。我怎样才能做到这一点。
答案 0 :(得分:0)
但我不能保证平面文件总是有10列 对于每一条记录。
imo这是SSIS的交易破坏者,因为它需要源和目的地之间的合同才能正常工作。为了避免任何错误风险或将数据放在错误的列中,我建议将整行作为一个非常大的varchar列导入,然后使用T-SQL将其“解析”为10列,检测缺点并处理他们优雅地