SSIS Package的Executable存在层次结构,例如Package位于层次结构的最顶层,Root Level;Container是其中包含的Executable(Task 或 Container)的Parent Level。如果Event 发生在Child Level,首先会被Child Level的Event Handler捕获,并处理;如果Child Level没有相应的Event handler,那么该Event会向上传递给其Parent Executable,由其Parent Executable的Event Handler来处理。Event依次向上传递的过程就是Propagate。

MSDN对Propagate的官方定义是:

Propagate is a system variable for event handlers, indicates whether the event is propagated to a higher level event handler.

Note:The value of the Propagate variable is disregarded during the validation of the package. If you set Propagate to False in a child package, this does not prevent an event from propagating up to the parent package.

1,OnError 事件具有Propagate特性

当Child Event Handler 处理OnError事件之后,OnError事件仍然会向上传递,直到最顶层的Package。

例如,在Package 和 Executable级别分别创建了OnError Event Handler,如下图:

下图是Executable级别的OnError Event Handler,其成功执行一个Task。

但是,OnError事件继续向上传递,被Package级别的OnError Event Handler捕获并处理之后,Package仍然报错:Package execution completed with error.

Event 的 Propagate 过程类似“冒泡”,从触发的Task开始,向上传递到最顶层的Executable,最顶层的Executable是 Package 本身。如果在 package 级别定义了一个Event handler,那么每当Event 发生在 package 中,都会触发该 Event Handler。如果Package使用Execute Package Task来执行子package,那么也会发生相同的过程,子package的Event会propagate到父package中。

2,关闭Event的Propagate

如果希望关闭Event的propagate过程,可以在子 Taske 的Event Handler中,将系统变量Propagate设置为false,这样,Event将不会向上传递,而只触发当前Task的Event Handler。系统变量Propagate的默认值是True。

step1,在Variables 窗体中,点击Grid Options,打开Variable Grid Options 窗体,勾选Show system variables

step2,在 Variables 窗体中,找到 Propagate 系统变量(Scope是OnError),将Value设置为False

3,当Event的Propagate 关闭之后,Event只会被触发的Task的Event Handler捕获并处理,而不会向上传递。

再次执行Package,由于OnError 事件是被child Execute SQL Task触发的,其Event handler捕获并处理该OnError事件

而Package级别的Event Handler并没有捕获到OnError事件,package的执行结果是Success。

Appendix:

引用《Integration Services (SSIS) Event Handlers》:

At run time, executables (packages and Foreach Loop, For Loop, Sequence, and task host containers) raise events. For example, an OnError event is raised when an error occurs. If an event has no event handler, the event is raised to the next container up the container hierarchy in a package. If this container has an event handler, the event handler runs in response to the event. If not, the event is raised to the next container up the container hierarchy.

The following diagram shows a simple package that has a For Loop container that contains one Execute SQL task.

Only the package has an event handler, for its OnError event. If an error occurs when the Execute SQL task runs, the OnError event handler for the package runs. The following diagram shows the sequence of calls that causes the OnError event handler for the package to execute.

Event handlers are members of an event handler collection, and all containers include this collection. If you create the package using SSIS Designer, you can see the members of the event handler collections in the Event Handlers folders on the Package Explorer tab of SSIS Designer.

参考doc:

Integration Services (SSIS) Event Handlers

System Variables

Event的Propagate的更多相关文章

  1. DOM: EVENT FLOW

    捕获阶段(capture phase) 捕获阶段的定义如下(w3c):The event object propagate through the target's ancestors from th ...

  2. Control Flow 如何处理 Error

    在Package的执行过程中,如果在Data Flow中出现Error,那么Data Flow component能够将错误行输出,只需要在组件的ErrorOutput中进行简单地配置,参考<D ...

  3. PTPX中的time_based analysis

    根据VCD文件的type,PTPX支持instantaneous peak power analysis和cycle_accurate peak power analysis. Time-Based ...

  4. SpringBoot学习之启动探究

    SpringApplication是SpringBoot的启动程序,我们通过它的run方法可以快速启动一个SpringBoot应用.可是这里面到底发生了什么?它是处于什么样的机制简化我们程序启动的?接 ...

  5. 深入理解SpringBoot之启动探究

    SpringApplication是SpringBoot的启动程序,我们通过它的run方法可以快速启动一个SpringBoot应用.可是这里面到底发生了什么?它是处于什么样的机制简化我们程序启动的?接 ...

  6. Spring源码分析(二十三)BeanFactory的后处理

    摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 目录 一.激活注册的 BeanFactoryPostProcessor ...

  7. SpringBoot学习(二)探究Springboot启动机制

    引言: SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会吃亏.所以这次博主就跟你们一起探究一下SpringBoot的启动原 ...

  8. Spring系列(三):Spring IoC源码解析

    一.Spring容器类继承图 二.容器前期准备 IoC源码解析入口: /** * @desc: ioc原理解析 启动 * @author: toby * @date: 2019/7/22 22:20 ...

  9. 从SpringBoot源码分析 配置文件的加载原理和优先级

    本文从SpringBoot源码分析 配置文件的加载原理和配置文件的优先级     跟入源码之前,先提一个问题:   SpringBoot 既可以加载指定目录下的配置文件获取配置项,也可以通过启动参数( ...

随机推荐

  1. Visual Studio 常用快捷键

    作为一个使用VisualStudio的程序员,使用快捷键会为你的开发提供助力. 下附个人开发过程中感觉比较实用的快捷键: 开始运行"devenv",启动相应版本的VisualStu ...

  2. 【转】《从入门到精通云服务器》第六讲—OpenStack基础

    前五期的<从入门到精通云服务器>受到了广泛好评,收到留言,有很多读者对云计算相关的技术非常感兴趣.应观众要求,我们这期要安利一条纯技术内容.准备好瓜子.花生,随小编一起进入OpenStac ...

  3. ACM: Gym 101047B Renzo and the palindromic decoration - 手速题

     Gym 101047B  Renzo and the palindromic decoration Time Limit:2000MS     Memory Limit:65536KB     64 ...

  4. 苹果safari浏览器window.open问题

    现象:在做项目的过程中,使用window.open打开新窗口,在windows系统的ie,firefox,chrome浏览器上测试均没有问题,在苹果系统的safari浏览器上发现有些window.op ...

  5. 使用GDB 追踪依赖poco的so程序,core dump文件分析.

    前言 在windows 下 系统核心态程序蓝屏,会产生dump文件. 用户级程序在设置后,程序崩溃也会产生dump文件.以方便开发者用windbg进行分析. so,linux 系统也有一套这样的东东- ...

  6. XCode设置自己windows习惯的快捷键(比如Home、End键)

    Xcode的preference(command+,)中可以设置Key Bindings.绑定自己习惯的快捷键.实测系统快捷键设置同样名字也可以生效,但操作比较繁琐这里就不介绍了. 1.打开Xcode ...

  7. 【Telerik】弹出对话框RadWindow,确认删除信息

    要做一个删除功能,但是删除前正常都要弹出对话框确认一下是否删除信息,防止误删信息.

  8. bzoj 刷水

    bzoj 3856: Monster 虽然是sb题,,但是要注意h可能<=a,,,开始忘记判了WA得很开心. #include <iostream> #include <cst ...

  9. [收藏]C++简单五子棋

    #include<iostream> #include<iomanip> using namespace std; ; //棋盘行数 ; //棋盘列数 char p[X][Y] ...

  10. nodejs与v8引擎

    Motivation JavaScript 是一款拥有「自动垃圾回收」功能的编程语言. 市面上具有这样功能的语言,一般都是拥有相对应的虚拟机的,像 Java的JVM ,C#的CLR ,PHP的Zend ...