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

SSIS OnError事件处理器配置问题:无法访问对应系统变量

SSIS OnError事件处理器系统变量访问解决方案

核心逻辑

SSIS里System::ErrorCode、System::ErrorDescription这类OnError专属系统变量,默认只在事件处理器的作用域内可见,没法直接修改它们的作用域,但可以通过变量映射的方式让事件里的组件(比如Script Task)正常读取这些值。

具体操作步骤

1. 按需创建包级变量(可选)

如果需要在事件处理器之外也能调用错误信息,先在包的顶级作用域创建两个自定义变量:

  • User::Error_Code:数据类型选Int32
  • User::Error_Desc:数据类型选String
    要是只在事件处理器内部用,这步可以跳过。

2. 给Script Task绑定系统变量

  • 找到要绑定OnError的任务/容器,右键选择Event Handlers,在事件下拉框选OnError,确保右侧Executables里已经添加了Script Task。
  • 双击打开Script Task,切到Script选项卡,点击ReadOnlyVariables(只读够用来读取错误信息)的下拉按钮。
  • 在变量选择窗口里,展开System节点,勾选System::ErrorCode和System::ErrorDescription,点确定完成映射。

3. 在脚本里访问变量

打开脚本编辑界面(以C#为例),直接通过Dts.Variables读取系统变量,也可以把值写入自定义变量:

// 读取OnError系统变量
int errorCode = (int)Dts.Variables["System::ErrorCode"].Value;
string errorDesc = Dts.Variables["System::ErrorDescription"].Value.ToString();

// 可选:把错误信息写入包级自定义变量,方便后续使用
Dts.Variables["User::Error_Code"].Value = errorCode;
Dts.Variables["User::Error_Desc"].Value = errorDesc;

Dts.TaskResult = (int)ScriptResults.Success;

4. 确认作用域绑定正确

  • 要捕获单个任务的错误,就给该任务单独加OnError事件;要捕获整个包的错误,就在包的顶级容器上添加OnError。
  • 别尝试移动系统变量的作用域,SSIS系统变量的作用域是固定的,只能通过映射让组件访问。

常见问题排查

  • 绑定变量时一定要通过下拉选择,别手动输入变量名,避免拼写错误导致找不到变量。
  • 要是用容器的OnError,注意检查容器的Propagate属性:设为False时错误不会向上传递到父容器;设为True则会继续传递,根据实际需求调整。

内容的提问来源于stack exchange,提问作者Mr.Jones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:42:35