首页 > 解决方案 > 快速加载错误输出不会重定向整个批次

问题描述

语境

我正在开发一个简单的 SSIS 包,其中包含一个数据流任务:

我在两个 OLE DB 目标中都使用了 FastLoad 选项,并且我已将第一个错误输出配置为将行重定向到第二个目标。

问题

从许多在线文章中,我了解到使用 Fastload 选项会导致整个批处理失败,而且不仅会重定向错误的行。

但是当执行包时,只有 2 行被重定向,所有其他行都成功导入。我检查了两个目标中的行数总和是否等于源行数,这意味着只有错误的行被重定向。

注意:

我在网上没有找到类似的案例。有什么解释吗?

标签: sql-serverssisetlssis-2014oledbdestination

解决方案


@DanGuzman 提到的是真的,因为当涉及到 OLE DB 目标时,数据的验证有两个阶段:

  1. 客户端验证
  2. 服务器端验证:

1. 客户端验证:

当数据从管道传输到 OLE DB 目标时,管道列(外部列)映射到 OLE DB 目标输入列,该列必须具有与服务器端列数据类型(数据库引擎)相关的数据类型。如果发生错误 当数据从外部列传递到 OLE DB 目标输入列时,可以单独重定向错误行。

示例:隐式转换失败:当DT_STR字段映射到 aDT_DATE并且它包含无效的日期值时

在此处输入图像描述

当我们说 Fastload 选项批量加载数据时,我们谈论的是数据从 OLE DB 目标输入列发送到目标本身(数据库引擎)时的阶段

2.服务器端验证

这种类型的验证是在向目标插入数据时完成的,例如身份、主键或外键违规......

如果在此阶段发生错误,则整个批次将被拒绝,并且所有行都将重定向到错误输出。


推荐阅读