【问题标题】:SSIS: don't import rows that don't have the correct number of columnsSSIS:不要导入列数不正确的行
【发布时间】:2015-10-16 03:03:17
【问题描述】:

我在 BIDS (SSIS 2008) 工作。我有一个非常简单的数据流任务,将平面文件导入 OLE DB 表。平面文件有 10 列,它们都映射到表中的相应列。平面文件的列分隔符是竖线字符,行分隔符是 {CR}{LF},并且没有标题。在平面文件源上,我将错误和截断上的违规行(所有 10 列)重定向到错误输出平面文件。

我每天都运行这个数据流任务,但我不能保证平面文件的每条记录总是有 10 列。因此,由于 SSIS 有使用行分隔符作为最后定义列的列分隔符的坏习惯(至少在我看来),因此它会尝试合并行。这意味着如果我的列数不足,则并非所有行都将作为单独的行导入表中。这也意味着违规行不一定会写入错误输出平面文件。

目前,仅有的两种情况是 (1) 文件将具有所需的列数,以及 (2) 文件将缺少列数。我还没有看到包含比预期更多的列的文件。因为此文件用于我的单元测试过程,所以我不想对文件进行预处理以获得正确的列数。我希望有问题的行写入错误输出平面文件(或者,如果不是错误输出平面文件),至少写入其他一些平面文件并且不被导入。我仍然希望导入具有正确列数的行。我怎样才能做到这一点。

【问题讨论】:

    标签: ssis


    【解决方案1】:

    但我不能保证平面文件总是有 10 列 每条记录。

    imo 这对 SSIS 来说是一个交易破坏者,因为它需要源和目标之间的合同才能正常工作。为避免出现任何错误风险或将数据放在错误的列中,我建议将整行导入为一个非常大的 varchar 列,然后使用 T-SQL 将其“解析”为 10 列,检测缺点并处理他们优雅地。

    【讨论】:

      猜你喜欢
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      相关资源
      最近更新 更多