快速加载错误输出不会重定向整个批次
Fast load error output doesn't redirect entire batch
上下文
我正在开发一个简单的 SSIS 包,其中包含一个数据流任务:
- 1 个 OLE DB 源
- 2 次查找转换
- 1 个 OLE DB 目标
- 1 错误输出行的 OLE DB 目标
我在两个 OLE DB 目标中都使用了 FastLoad 选项,并且我已经配置了第一个目标的错误输出以将行重定向到第二个目标。
问题
从许多在线文章中,我读到使用 Fastload 选项将导致 整个批处理 失败,不仅重定向错误的行。
- Error Handling With OLE DB Destinations
- Error output in OLE DB Destination. How to redirect a row?
- How to handle Failed Rows in a Data Flow
- Have your SSIS Fast Load (Bulk Load) and Row by Row Error Messages too
但是当执行包时,只有 2 行被重定向,所有其他行都被成功导入。我检查了两个目标中的行数之和是否等于源行数,这意味着只有错误的行被重定向。
注意:
- 最大提交大小 =
2147483647
- 批量大小为空
- Table 锁定和检查约束选项已选中
- 我正在使用 SQL Server 2014 和 Visual Studio 2013
网上没有找到类似的案例。有什么解释吗?
@DanGuzman 提到的是真实的,因为当涉及到 OLE DB 目标时,数据验证有两个阶段:
- Client-side 验证
- Server-side 验证:
1。 Client-side 验证:
当数据从管道到 OLE DB 目标时,管道列(外部列)映射到 OLE DB 目标输入列,该列必须具有与服务器端列数据类型(数据库引擎)相关的数据类型。如果在数据从外部列传递到 OLE DB 目标输入列时发生错误,则可以单独重定向错误行。
示例:隐式转换失败:当 DT_STR
字段映射到 DT_DATE
并且它包含无效日期值时
当我们说 Fastload 选项批量加载数据时,我们指的是数据从 OLE DB 目标输入列发送到目标本身(数据库引擎)的阶段
2。 Server-side 验证
这种类型的验证是在将数据插入目标时完成的,例如身份、主键或外键违规...
如果在此阶段发生错误,则拒绝整个批次并将所有行重定向到错误输出。