SSIS OnError事件处理器配置问题:无法访问对应系统变量
SSIS OnError事件处理器系统变量访问解决方案
核心逻辑
SSIS里System::ErrorCode、System::ErrorDescription这类OnError专属系统变量,默认只在事件处理器的作用域内可见,没法直接修改它们的作用域,但可以通过变量映射的方式让事件里的组件(比如Script Task)正常读取这些值。
具体操作步骤
1. 按需创建包级变量(可选)
如果需要在事件处理器之外也能调用错误信息,先在包的顶级作用域创建两个自定义变量:
User::Error_Code:数据类型选Int32User::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
相关产品推荐
相关产品推荐

