好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

IntegrationServices学习(4):变量和表达式

变量 ,作为程序员的我们,是一个多么熟悉的概念,从开始 学习 编程的第一天起,就要了解什么是 变量 ?如何定义一个 变量 ? 变量 的使用范围等。现在还有必要在这里大费口舌来讨论“ 变量 ”吗?不错,我们今天谈的 变量 ,也脱离不了这个范畴:如何定义一

变量 ,作为程序员的我们,是一个多么熟悉的概念,从开始 学习 编程的第一天起,就要了解什么是 变量 ?如何定义一个 变量 ? 变量 的使用范围等。现在还有必要在这里大费口舌来讨论“ 变量 ”吗?不错,我们今天谈的 变量 ,也脱离不了这个范畴:如何定义一个 变量 ?如何使用 变量 ? 变量 的使用范围等。但是在ETL的发展过程中,从以前Sql Server 97、Sql Server 2000的DTS到后来的Sql server Integration Services 2005 ,再到现在的Sql Server Integration Services 2008, 变量 也发生了巨大的变化,其作用也变得越来越重要了。SSIS 包中各组件原本是想互独立,彼此分割的,就需要通过 变量 来进行信息传递与交流。就象生活在这座城市中的我们,回家同居一小区,出门同乘一班车,但是老死不相往来,每日相逢不相识,彼此从不沟通,从不交流。现在突然来了一位美丽的使者(Variable),挨门挨户地传递信息,把大家凝聚在一起,彼此的沟通和交流多起来了,从此这个小区就变得热闹起来,相互间和谐多了。

  Integration Services 中的 变量 ,同其它编程语言中的 变量 非常相似----它们都是用于临时存储数据。但是也有一些区别:Integration Services 变量 ,它还是一个对象,有自已的属性(property),有自已的响应事件。下面我们就看看如何定义 变量 。

  打开Integration Services Solution ,打开菜单SSIS(S)--- 变量 (S),就会弹出如图所示的窗口。

  从这个窗口中,我们可以明白 变量 以下几方面的情况:

  (1)、 变量 的分类,在Integration Services 中, 变量 有两种类型:系统 变量 和用户自定义 变量 。其中系统 变量 ,比如:TaskID,TaskName,CreateName,CreateDate等,提供包运行时的一些基本属性,可供包中的组件或者代码使用。这些 变量 一般是只读的,在运行的过程中,根据包的运行环境默认生成,不可以修改。而自定义 变量 呢?两种情况都可以定义了:只读、读写。

  (2)、 变量 的作用域。有基于包的全局 变量 ,也有基于某一组件的局部 变量 。这与以前的DTS有较大的差异,以前DTS包中的 变量 ,都是基于包的全局 变量 。

  (3)、 变量 的名称、 变量 的数据类型、默认值等与其它编程语言没有什么差异,在此就不多说了。

  (4)、Raise Change Event 。这是Integration Services 的一个新属性。它是一个Bool 值,如果其值为True,每当 变量 的值发生改变,VariableValueChangedEvent 将会响应,否则,这个事件将不会响应。(SSIS中的事件,以后会讲到,这里暂不深入).

  除了上面提到的这些属性外, 变量 还有一个重要的属性-- 变量 的可继承性。前面提到 变量 有全局 变量 与局部 变量 ,而局部 变量 是针对某一个组件可见的 变量 ,但是Integration Services 中的组件是分层的,即有祖先级组件,也有子孙级组件,那么子孙组件就会继承祖先组件的 变量 ,可以引用,可以修改,也可以触发 变量 VariableValueChangedEvent 事件。如图:

二、 表达式 。

  前面讲述了表 变量 的定义、 变量 的命名空间、 变量 的作用范围等,但是却没有提及如何使用 变量 。这就是我们这一节要介绍的内容-- 表达式 。

  “在SSIS解决方案中,对于 表达式 的强大功能怎么表述都不过分。在SSIS中,我最喜欢的功能就是 表达式 ”--Jamie Thomson

  正如Jamie 所言, 表达式 的功能在SSIS简直是太强大了,组件的属性、 变量 、优先级约束、For/Foreach循环容器等,都可以用 表达式 进行设置。从而使用包变得更加强大、灵活。下面我们将讲一讲常见的几种 表达式 的应用。

  (一)、属性 表达式 。

  在Integration Services 中,大多数组件都有Expressions 这个属性,如图:

  Expressions 就是为组件定义 表达式 的属性,点击“...”按钮,打开“属性 表达式 编辑器”对话框,如图:

我们可以简单地比较一下,一个文本文件连接对象,基本上大多数属性都可以通过 表达式 来定义,这就是它的强大的之处。 表达式 的定义,也非常方便,有一个功能全面的“ 表达式 生成器”窗口,如图:

  这个窗口有四个区域,左上角为“ 变量 ”区域,包含了全局 变量 和该对象可见的局部 变量 。右上角为“函数”和“运算符”区域,中间为 表达式 编辑区域,下面为 表达式 结果显示区,每当一个 表达式 定义完成,我们为了验证 表达式 定义是否正确,点击“计算 表达式 ”按钮,就可以模拟计算出 表达式 的结果。请大家别小看了这个按钮,在Debug 表达式 时,非常有用哦。

  (二)、 变量 表达式 。

   变量 表达式 的定义同属性 表达式 的定义完全相同,选择 变量 的“Expressions ”属性,打开属性编辑器,进行编辑即可。

  (三)、优先约束 表达式 。

  一般在控制流中有多个任务组件,比如有Script 任务,有数据流任务,有SQL脚本任务等,我们有时并不需要这些任务全部都要执行,而是需要根据前面一个任务的执行结果,动态地决定后面的任务是否执行,这就需要用到优先约束 表达式 。如图:

  优先约束控制着包的工作流,它会判断包的约束是否满足,然后再按照约束条件来选择包是继续运行,还是停止运行。在以前的DTS中,优先约束仅限于前面的任务是“成功”、“失败”、“完成”这三种状态,而现在除了以上三种状态外,还多了一个“ 表达式 和约束”,即我们可以通过定义 表达式 来定义约束,比如上图所示,如果我们需要定义当错误数量超过5次以后,包才失败,停止运行。这就要用到 表达式 约束了。

  (四)、循环容。

  “For 循环”是一个容器组件,它可以让某些组件在此容器中,重复运行指定的次数。在这个容器中,我们要定义初值、定义 表达式 、定义赋值语句,如图:

  

  常用的 表达式 应用,就是以上这些了,当然还有其它一些类型的 表达式 定义,我们就不一一列举了,使用方法都大同小异,只要撑握了前面几种,这些定义也就一目了然了。

  今天我们讲述了两个内容: 变量 和 表达式 ,这两方面的内容,在SSIS包中扮演了非常重要的角色,只要我们充分、灵活地运用,它可以让包更有弹性,更灵活,更加有生命力。如果大家在以后的工作中遇到了,仔细琢磨琢磨,一定不会让你失望的。

查看更多关于IntegrationServices学习(4):变量和表达式的详细内容...

  阅读:40次