sql-server - 快速加载错误输出不会重定向整个批次
问题描述
语境
我正在开发一个简单的 SSIS 包,其中包含一个数据流任务:
- 1 OLE DB 源
- 2 查找转换
- 1 个 OLE DB 目标
- 1 错误输出行的 OLE DB 目标
我在两个 OLE DB 目标中都使用了 FastLoad 选项,并且我已将第一个错误输出配置为将行重定向到第二个目标。
问题
从许多在线文章中,我了解到使用 Fastload 选项会导致整个批处理失败,而且不仅会重定向错误的行。
但是当执行包时,只有 2 行被重定向,所有其他行都成功导入。我检查了两个目标中的行数总和是否等于源行数,这意味着只有错误的行被重定向。
注意:
- 最大提交大小 =
2147483647
- 批量大小为空
- 检查表锁定和检查约束选项
- 我将 SQL Server 2014 与 Visual Studio 2013 一起使用
我在网上没有找到类似的案例。有什么解释吗?
解决方案
@DanGuzman 提到的是真的,因为当涉及到 OLE DB 目标时,数据的验证有两个阶段:
- 客户端验证
- 服务器端验证:
1. 客户端验证:
当数据从管道传输到 OLE DB 目标时,管道列(外部列)映射到 OLE DB 目标输入列,该列必须具有与服务器端列数据类型(数据库引擎)相关的数据类型。如果发生错误 当数据从外部列传递到 OLE DB 目标输入列时,可以单独重定向错误行。
示例:隐式转换失败:当DT_STR
字段映射到 aDT_DATE
并且它包含无效的日期值时
当我们说 Fastload 选项批量加载数据时,我们谈论的是数据从 OLE DB 目标输入列发送到目标本身(数据库引擎)时的阶段
2.服务器端验证
这种类型的验证是在向目标插入数据时完成的,例如身份、主键或外键违规......
如果在此阶段发生错误,则整个批次将被拒绝,并且所有行都将重定向到错误输出。
推荐阅读
- spring-batch - 如何避免多实例批处理脚本中的重复记录处理
- java - 如何在 Hibernate java 中的 MySql DB 中存储 JSON 类型的数据
- reactjs - NVDA 屏幕阅读器无法访问 React 中为视频提供的字幕
- wordpress - 在 cPanel 中找不到 Wordpress 工具包。不推荐使用 Wordpress 管理器
- javascript - 始终在反应 js antd 中的选择下拉列表顶部显示选择选项
- javascript - 在 Javascript 中拆分数组数据
- python - Django Heroku 频道实时聊天失败
- java - Java DateTime 输出格式化程序等价于 Calender.getInstance 方法
- javascript - 在 react-native 中制作瀑布效果的问题
- kernel - QEMU 如何在没有引导加载程序的情况下模拟内核?