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

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

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

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

 

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

 

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

  (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 学习(4):变量和表达式转

 

二、表达式。

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

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

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

  (一)、属性表达式。

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

 

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

 

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

 

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

 

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

 

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

 

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

  (二)、变量表达式。

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

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

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

 

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

 

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

  (四)、循环容。

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

 

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

 

   

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

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

/***********************************************************************************************
 *【Author】:游子吟
 *【Date  】:2013年07月02日
 *【URL   】:http://www.cnblogs.com/invinboy/archive/2009/12/28/1633266.html
 *【Notice】:
 *1、本文为原创技术文章,首发博客园个人站点。
 *2、转载和引用请注明作者及出处。
 *3、本文必须全文转载和引用,任何组织和个人未授权不能修改任何内容,并且未授权不可用于商业。
 *4、本声明为文章一部分,转载和引用必须包括在原文中。
 ***********************************************************************************************/

更多相关文章
  • (原创)c#学习笔记03变量和表达式04表达式01数学运算符
    3.4  表达式 把变量和字面值(在使用运算符时,它们都称为操作数)与运算符组合起来,就可以创建表达式,它是计算的基本构件. 本章主要介绍数学和赋值运算符,而逻辑运算符将在第4章中介绍,主要论述控制程序流程的布尔逻辑. 运算符大致分为如下3类. 一元运算符,处理一个操作数: 二元运算符,处理两个操作 ...
  • (原创)c#学习笔记03变量和表达式03变量01简单类型
    3.3 变量 变量有不同的内涵,称为类型.建立这个类型系统的原因是,不同类型的数据需要用不同的方法来处理. 要使用变量,需要声明它们.即给变量指定名称和类型.声明变量后,就可以把它们用作存储单元,存储所声明的数据类型的数据. 声明变量的C#语法是指定类型和变量名,如下所示: <type> ...
  • 本章内容: ●  C#的基本语法 ●  变量及其用法 ●  表达式及其用法   3.1 c#的基本语法 C#代码由一系列语句组成,每个语句部用个分号来结束. C#是一种块结构的语言,所有的语句都是代码块的一部分.这些块用花括号来界定( “{”和“}”),代码块可以包含任意多行语句,或者根本不包含语句 ...
  • (原创)c#学习笔记03变量和表达式04表达式03运算符的优先级
    3.4.3  运算符的优先级 在计算表达式时,会按顺序处理每个运算符.但这并不意味着必须从左至右地运用这些运算符.例如,有下面的代码: var1 = var2 + var3; 其中+运算符就是在=运算符之前进行计算的.在其他一些情况下,运算符的优先级并没有这么明显,例如: var1 = var2 + ...
  • (原创)c#学习笔记03变量和表达式04表达式02赋值运算符
    3.4.2  赋值运算符 表3-9列出了这些运算符及其说明. 可以看出,这些运算符把var1也包括在计算过程中,下面的代码: var1 += var2; 与下面的代码结果相同. var1 = var1 + var2; note: +=运算符也可以用于字符串,与+运算符一样. 使用这些运算符,特别是在 ...
  • 3.3.2  变量的命名 基本的变量命名规则如下: 变量名的第一个字符必须是字母.下划线(_)或@. 其后的字符可以是字母.下划线或数字. 另外,有一些关键字对于C#编译器而言有特定的含义,例如前面出现的using和namespace关键字.如果错误地使用其中一个关键字,编译器会产生一个错误,我们就 ...
  • 3.2 C#控制台应用程序的基本结构 我们看看:(原创)c#学习笔记02--编写c#程序02--控制台应用程序,中的代码,如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...
  • bash工作特性:    1.支持命令历史.命令补全    2.支持管道.重定向    3.支持命令别名    4.支持命令行编辑    5.支持命令行展开     6.支持文件名通配    7.支持使用变量    8.支持编程命令编辑:光标跳转:ctrl+a:跳到命令行首  home        ...
一周排行