【问题标题】:BIDS - SSIS - Redirect row on Error sends too many rowsBIDS - SSIS - 错误时重定向行发送太多行
【发布时间】:2011-03-02 20:08:00
【问题描述】:

我有一个简单的数据流。 源代码是一个包含大约 16k 行的小型平面文件。 目标是一个 OLE DB 目标,一个带有 3 部分唯一键的 SQL 2008 表。 数据流通过一些简单的转换;行数、派生列、数据转换等。

一切都很简单,一切正常。

我的问题是,在此数据中,有 2 行在主键方面是重复的,2 个重复的行违反了该键,所以总共 4 行。在 OLE DB 目标上,我已将错误输出设置为重定向行,并将行发送到错误表,该表有足够的列供我识别错误行。

问题在于,即使有 4 个cuplrit,转换仍会继续将 1268 行写入错误表。

有什么想法吗?

谢谢。

**

只是补充一点,如果我删除 2 个重复的行,整个文件会成功导入....16,875 行。 毫无疑问,只有2行违反了key,但是错误重定向影响了1268。

**

【问题讨论】:

  • 您是否检查了这 1268 行,即它们看起来是否正确,或者可能是其他原因导致它们按照 bobs 的建议出错。

标签: sql-server-2008 ssis


【解决方案1】:

我找到了解决办法。

如果您在 OLE 目标中使用数据访问模式“表或视图”而不是“表或视图 - 快速加载”加载数据,问题就会消失。

我能找到的唯一相关评论是在 MSDN 上;

目的地的任何约束失败都会导致由 FastLoadMaxInsertCommitSize 定义的整批行失败。

因此,在我的情况下,行大小似乎是 1268,并且违反密钥的 2 个重复行导致整个批次被重定向到错误目标表。

【讨论】:

    【解决方案2】:

    您确定其他行是由于 PK 违规导致的错误吗?有几个附加列(ErrorCode、ErrorColumn)可通过错误路径获得。这可能表明您有不同的问题。

    【讨论】:

    • 谢谢你,我不知道你可以添加那些列。我添加了它们并得到了值;错误代码 - -1071607685,在 dtsmsg.h 中转换为 // MessageId: DTS_E_OLEDBDESTINATIONADAPTERSTATIC_UNAVAILABLE // // MessageText: // // 没有可用的状态。 // #define DTS_E_OLEDBDESTINATIONADAPTERSTATIC_UNAVAILABLE ((HRESULT)0xC020907BL) 并且错误列是 0 - 一个快速的谷歌建议这意味着行而不是列的错误............所以没什么新的在那里。
    • 这篇文章说-1071607685可能与FK约束相关:dwexperience.blogspot.com.au/2007/10/…
    • 进一步到“-1071607685” - 这对我们来说是唯一索引失败。 (另一个空行)。当我们关闭“重定向行”错误处理并且刚刚让包/步骤失败时,我们获得了更多信息。
    【解决方案3】:

    在 SQL 2008 中,您可以将失败的行重定向到例如平面文件目标。转到目标 OLEDB 任务转到错误输出(选择窗口中的所有字段)。使用下面的组合框选择重定向行并应用,然后确定。 接下来将一个优先约束(红色箭头)从 OLEDB 拖到一个新的平面文件任务并配置此任务(不要更改列的默认映射)。

    现在您应该可以更轻松地找到错误行了。

    埃里克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 2017-06-02
      • 2021-06-03
      • 1970-01-01
      • 2017-06-21
      相关资源
      最近更新 更多