You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSIS项目插入数据遇错误即中断,如何跳过错误继续写入?

解决方案:SSIS忽略插入错误并完成全量数据处理

1. 修正目标组件的错误输出配置

  • 选中数据流中的目标表组件(如OLE DB目标),右键选择「编辑」,切换到「错误输出」选项卡
  • 将ErrorCode和ErrorColumn列的错误、截断处置方式全部设置为「忽略失败」(Ignore Failure)
  • 注意:必须针对目标组件配置,上游转换组件的错误配置不影响插入阶段的错误处理

2. 调整数据流任务的错误阈值

  • 右键数据流任务 → 打开「属性」面板,修改MaximumErrorCount为足够大的数值(如999999),避免少量错误就触发任务终止
  • 同时将FailPackageOnFailure和FailParentOnFailure设为False,确保单个数据流任务的错误不会中断整个包的执行

3. 错误行重定向(更可控的方案)

如果单纯忽略失败仍无效,改用错误行重定向模式:

  • 在目标组件的「错误输出」中,将错误处置设置为「重定向行」(Redirect Row)
  • 添加平面文件目标或专门的错误日志表,接收重定向的错误行,记录错误代码、描述及原始数据
  • 这种方式既保证正常行完成插入,又能留存错误数据用于后续排查

4. 用T-SQL替代SSIS组件执行插入(终极方案)

若SSIS组件的错误逻辑始终不生效,直接用带错误处理的T-SQL语句:

  • 单条插入用TRY...CATCH包裹:
BEGIN TRY
    INSERT INTO 目标表 (列1, 列2) VALUES (@值1, @值2)
END TRY
BEGIN CATCH
    -- 可选:记录错误到日志表
    INSERT INTO 错误日志表 (错误信息, 错误时间, 原始数据)
    VALUES (ERROR_MESSAGE(), GETDATE(), CONCAT('值1:', @值1, '; 值2:', @值2))
END CATCH
  • 批量插入先判断主键是否存在,避免冲突:
INSERT INTO 目标表 (列1, 列2)
SELECT 源列1, 源列2
FROM 源数据
WHERE NOT EXISTS (
    SELECT 1 FROM 目标表 WHERE 主键列 = 源数据.主键列
)

这种方式完全由SQL控制错误逻辑,不受SSIS组件默认行为限制

5. 验证执行模式

  • 避免在调试模式下使用「逐行执行」,该模式遇到错误会暂停而非继续
  • 切换到正常执行模式,确认错误行被跳过、后续数据正常处理

内容的提问来源于stack exchange,提问作者Gastón Díaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 23:15:03