0

语境

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

  • 1 OLE DB 源
  • 2 查找转换
  • 1 个 OLE DB 目标
  • 1 错误输出行的 OLE DB 目标

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

问题

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

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

注意:

  • 最大提交大小 =2147483647
  • 批量大小为空
  • 检查表锁定和检查约束选项
  • 我将 SQL Server 2014 与 Visual Studio 2013 一起使用

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

4

1 回答 1

1

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

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

1. 客户端验证:

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

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

在此处输入图像描述

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

2.服务器端验证

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

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

于 2019-06-14T14:09:21.490 回答