变量,作为程序员的我们,是一个多么熟悉的概念,从开始学习编程的第一天起,就要了解什么是变量?如何定义一个变量?变量的使用范围等。现在还有必 要在这里大费口舌来讨论“变量”吗?不错,我们今天谈的变量,也脱离不了这个范畴:如何定义一个变量?如何使用变量?变量的使用范围等。但是在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包中扮演了非常重要的角色,只要我们充分、灵活地运用,它可以让包更有弹性,更灵活,更加有生命力。如果大家在以后的工作中遇到了,仔细琢磨琢磨,一定不会让你失望的。

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

SSIS 学习(4):变量和表达式【转】的更多相关文章

  1. SQL Server SSIS中的变量使用表达式后,就无法更改其值了

    在SQL Server SSIS中,我们可以为变量定义初始值和表达式,其实SSIS的变量定义为表达式后我们就无法更改变量的值了,我们来做如下实验: 首先我们在SSIS包中定义一个String类型的变量 ...

  2. SSIS 学习(3):数据流任务(下)【转】

    前一篇文章SSIS 学习(2):数据流任务(上), 介绍了如何创建一个简单的ETL包,如何通过一个简单的数据流任务,将一个文本文件的数据导入到数据库中去.这些数据都保持了它原有的本色,一个字符不 多, ...

  3. 六天玩转javascript:javascript变量与表达式(2)

    本系列内容为本人平时项目实践和参照MDN,MSDN,<javascript语言精粹>,<Effective Javascript>等资料,并且整理自己EverNote的日常积累 ...

  4. 六天玩转javascript:javascript变量与表达式(1)

    说明 本系列属于进阶系列,语常用语法等不在本系列介绍范围之内. 在我刚开始做一个程序员并开发项目的时候,我总是喜欢使用开发语言的各种特性,每次m$发布新版C#的时候我总是会把开发者预览版下好,亲自体验 ...

  5. SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器

    原文:SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器 上期回顾: SSIS从理论到实战,再到应用(2)----SSIS包的控制流   首先我们来看看包里面的变量 SSIS ...

  6. Dart学习笔记-运算符-条件表达式-类型转换

    Dart学习笔记-运算符-条件表达式-类型转换 一.运算符 1.算术运算符 + (加)- (减)* (乘)/ (除)~/ (取整) %(取余) 2.关系运算符 == (等等) != (不等) > ...

  7. 学好Spark/Kafka必须要掌握的Scala技术点(一)变量、表达式、循环、Option、方法和函数,数组、映射、元组、集合

    前言 Scala是以JVM为运行环境的面向对象的函数式编程语言,它可以直接访问Java类库并且与Java框架进行交互操作.正如之前所介绍,Spark是用Scala语言编写的,Kafka server端 ...

  8. [Java] 数据类型, 变量, 运算符, 表达式

    title: [Java] 变量与表达式 你已经学会输出 Hello world 了, 那么现在, 我们来学习关于变量的知识 基本数据类型 在 Java 中, 有 8 种基本的数据类型: 名称 描述 ...

  9. js学习之变量、作用域和内存问题

    js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...

随机推荐

  1. 重新执笔,已是大三!Jekyll自定义主题开发

    前言 “一转眼忘了时间 丢了感觉 黑了世界 再逞强 再疯狂 也会伤 不知 不觉 后知 后觉 然后 发现 失去 知觉 ”——<一吻不天荒> 感言 时间是把双刃剑,什么解决不了,忧烦的,慢慢变 ...

  2. Sqlserver作业-手把手带你体验

    所谓Sql Server作业就是按照规定的时间执行指定的脚本,如果在SQL Server 里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时,可以用管理-SQL Server代 ...

  3. struts2框架开发的第一个应用

    写这篇博文,主要是帮助那些刚接触struts2框架开发而不知所措的人,希望批评指正 一.先建立一个web project,命名为struts2 二.在webroot/WEB-INF/lib目录下添加如 ...

  4. arduino图形化编程——ardublock

    下载地址:http://sourceforge.net/projects/ardublock/ 项目主页:https://github.com/taweili/ardublock 运行效果图 ardu ...

  5. 【转】手把手教你利用Jenkins持续集成iOS项目

    前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段.用户们都是很挑剔的.如果一个公司的推广团队好不容易砸了重金推广了一个APP,好不容易有了一些用户,由于一次线上的bug导致一 ...

  6. POJ 2185 Milking Grid(KMP)

    Milking Grid Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 4738   Accepted: 1978 Desc ...

  7. Spring Filter components in auto scanning

    In this Spring auto component scanning tutorial, you learn about how to make Spring auto scan your c ...

  8. 微软企业库5.0学习-Security.Cryptography模块

    一.微软企业库加密应用模块提供了两种加密: 1.Hash providers :离散加密,即数据加密后无法解密 2.Symmetric Cryptography Providers:密钥(对称)加密法 ...

  9. hdu2248

    纷菲幻剑录 之 十年一剑 Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  10. Codeforces Round #337 (Div. 2) D. Vika and Segments (线段树+扫描线+离散化)

    题目链接:http://codeforces.com/contest/610/problem/D 就是给你宽度为1的n个线段,然你求总共有多少单位的长度. 相当于用线段树求面积并,只不过宽为1,注意y ...