SSIS中Excel源失败时,能否通过OLE DB写入errors错误表?
在SSIS中捕获Excel Source错误并记录到Errors表
完全可以实现这个需求!SSIS的事件处理程序(Event Handlers)就是专门用来处理这类运行时异常的,下面是一步步的具体实现方案:
1. 先确认Errors表的结构
首先要确保你的OLE DB目标数据库里的errors表有匹配的字段,推荐的表结构可以参考这个(根据实际需求调整字段长度或类型):
CREATE TABLE errors ( error_date DATETIME NOT NULL, operation NVARCHAR(255) NOT NULL, error_message NVARCHAR(MAX) NOT NULL );
2. 给Excel Source配置错误事件处理
- 打开你的SSIS包,在Control Flow界面找到目标Excel Source组件。
- 切换到顶部的Event Handlers选项卡,在事件下拉菜单中选择
OnError,点击「Create」创建该事件的处理流程。
3. 构建错误记录的执行逻辑
在OnError事件的Control Flow画布中,添加一个Execute SQL Task,用来完成错误信息的插入:
- 双击打开Execute SQL Task,在「Connection」下拉框里选择连接到
errors表所在数据库的OLE DB连接。 - 在「SQLStatement」中编写插入语句,利用SSIS的系统变量获取所需信息:
INSERT INTO errors (error_date, operation, error_message) VALUES (GETDATE(), ?, ?) - 切换到「Parameter Mapping」选项卡,添加两个参数映射:
- 第一个参数:选择系统变量
System::SourceName(对应操作名称,也就是你的Excel Source组件名),数据类型选NVARCHAR,参数序号设为0。 - 第二个参数:选择系统变量
System::ErrorMessage(对应系统返回的错误详情),数据类型选NVARCHAR,参数序号设为1。
小提示:如果想用SSIS自身的时间变量,也可以把
GETDATE()换成?,再映射System::CurrentDateTime变量,效果是一样的。 - 第一个参数:选择系统变量
4. 测试错误场景
故意把Excel文件移走或者改名,运行SSIS包,之后查询errors表,就能看到包含错误日期、操作名称、错误消息的记录了。
额外优化建议
- 如果需要更详细的错误维度,还可以加入
System::ErrorCode(错误代码)、System::PackageName(包名称)等系统变量,按需扩展插入语句和表结构。 - 记得检查Execute SQL Task的错误处理属性,避免错误处理流程本身抛出异常导致包中断。
内容的提问来源于stack exchange,提问作者Broodwing009
相关产品推荐
相关产品推荐

