SSIS – 变量和表达式

变量和属性表达式是 SSIS 设计中非常重要的组成部分,它们是提高SSIS 灵活性的主要手段。变量和属性表达式是互相关联的,通常在属性表达式中常常使用变量,所以我把他们放在一起介绍。

变量

早在 SQL Server DTS 中就引入了变量的概念,它的定义就像其他程序语言一样,起到在程序中 SSIS Package 中重复使用,灵活赋值的作用。程序设计语言中有全局变脸和局部变量的区别,从 SSIS 2005 开始,也引入了这个类似的定义。

SSIS 变量从作用范围上说有两种分类:Package 级别的变量和 Container 级别的变量。Package 级别的变量跟全局变量的定义类似,它的作用范围是整个 SSIS Package,在 Package 的任何一个组件中都可以访问它。Container 级别的变量类似于局部变量,它的使用范围局限于定义它的  Container 或者是控制流任务。同一范围的变量它们的名字不能重复,但是不同范围的变量,他们的名字可以重复!

SSIS 变量从定义方式分为系统变量 和用户自定义变量 ,系统变量顾名思义 是系统内置的变量,我们不能增加和删除系统变量,我们只能读取它们的值而不能修改它们的值。系统变量保存了一切与当前 Package 或者 Container 有关的信息,比如 Container 的名字、建立的时间、版本号等等。如果我们的Package 用错误捕获的设置,系统变量中好保存着错误信息等。系统变量的存取是根据当前 Package 中的任务不同而变化的。

用户自定义变量是最用开发者定义的变量,它常用来动态地设置 Package 中可以访问的信息,或者作为处理过程中的中间媒体保存动态的值等。我们在使用属性表达式的时候通常需要访问系统变量或者用于自定义变量。

不论是系统变量还是用户自定义变量,它们有一个有用的属性:Raise Change Event,这个属性的默认值是 False.  如果它的值设置为 Ture, 那么当SSIS Package 设置了执行日志(Logging) 的时候,日志中的 OnVariableValueChanged 事件才能捕获到这个变量的变化。也就是说在默认情况下,即使在 Logging 中选择了 OnVariableValueChanged 属性,如果变量的 Raise Change Event 仍然是默认值 False 的话,那么它在运行中值的变化也不能被 Log 记录下来。

属性表达式

属性表达式是 SSIS Package 开发中相对比较高级的话题,它可以是我们的 SSIS Package 变得相当地灵活。属性表达式存在于所有的控制流任务和数据连接中,它用来在运行阶段设置该任务或者数据连接的某些属性,如果一个控制流任务使用属性表达式 设置了它的值,那么它在属性表达式中设置的值将在运行阶段覆盖设计阶段的赋值。

下面我用一个例子来介绍属性表达式的使用,在这个例子中我使用一个变量来动态地设置 SQL Statement 的值

  • 打开上一节课我介绍 For Loop Container 的例子。
  • 新增加一个 For Loop Container 级别的变量:MyName, Data Type 设置为 String, 将其默认值设置为 ThisName。
  • 双击 For Loop Container 中的 Execute SQL Task 打开 Expression 页面, 这个任务用来向 Clients 表中插入记录。打开属性表达式编辑器,在 Property (属性)列中选择 SqlStatementSource, 在表达式中输入下面的语句:

“Insert Into dbo.Clients (ClientName) Values (‘” +  @[User::myName] + “‘ + Convert(Varchar,?))”

时间: 2024-11-06 09:42:31

SSIS – 变量和表达式的相关文章

SSIS变量属性中EvaluateAsExpression设置的作用

我们在做SqlServer SSIS包开发的时候,经常会用到SSIS的变量,我们可以使用和修改SSIS变量的值使得SSIS包的逻辑更灵活,如下图所示: 在定义SSIS变量的时候可以使用固定值(如上图中的变量Number),也可以是使用表达式(如上图中的变量Sql),使用表达式的时候可以让变量去使用另一个变量的值,比如下图是变量Sql的表达式,其中就使用了变量Number的值: 顺便说一下,本文上面的截图都是基于SqlServer2012的SSIS包,也就是VisualStudio 2010的SS

第十三篇 Integration Services:SSIS变量

本篇文章是Integration Services系列的第十三篇,详细内容请参考原文. 简介在前一篇我们结合了之前所学的冒泡.日志记录.父子模式创建一个自定义的SSIS包日志记录模式.在这一篇,我们将升级我们的解决方案为SQL Server 2012 Integration Services,演示SSIS变量,变量配置和表达式管理动态值.在前面的练习中我们已经使用过变量,但我们没有深入学习,这一篇,我们将关注SSIS变量.…………一旦安装好,你可以设置主题颜色,工具->选项->环境->常

[译]Stairway to Integration Services Level 13 -SSIS 变量回顾

介绍 在前一篇中我们组合了已经学过的事件冒泡 event bubbling, 日志记录 logging, 和父子模型 Parent-Child pattern 建立了自定义的SSIS包日志记录. 本文中, 我们会将我们的解决方案升级至 SQL Server 2012 Integration Services 并且展示 SSIS变量 (SSIS variables), 变量(variable configuration), 以及通过表达式处理动态值 (dynamic value managemen

灵活运用SQL Server2008 SSIS变量

在SSIS开发ETL(Extract-Transform-Load),数据抽取.转换.装载的过程.我们需要自己定义变量 一.SSIS变量简介 SSIS(SQL Server Integration Services,SQL Server整合服务)变量分分为两种,一种是系统变量,一种用户定义的变量.系统变量包括有关包.容器.任务或事件处理程序的非常有用的信息.例如,在运行时,MachineName系统变量包含运行包含的计算机的名称,StartTime变量包开始运行的时间.系统变量是只读的.在SSI

第一天:javascript变量与表达式(2)

本系列内容为本人平时项目实践和参照MDN,MSDN,<javascript语言精粹>,<Effective Javascript>等资料,并且整理自己EverNote的日常积累整理所写,时间太长有一些代码样例来源不可考.本系列不允许任何形式的转载,谢谢. from yeanzhi 大纲 第一天:javascript变量,操作符与变量作用域 第二天:javascript函数 第三天:对象与原型 第四天:再谈函数与继承 第五天:内置对象 第六天:特殊性质与技巧 第一天:javascri

变量和表达式

注释 /* This is a comment */ /* and so - -          */ // This is a different sort of comment. /// <summary> #region #endregion 简单类型 整数类型 sbyte  System.Sbyte  -2^7 - 2^7-1 byte   System.Byte   0 - 2^8-1 short  System.Int16  -2^15 - 2^15-1 ushort Syste

C#入门经典札记_Chapter3_变量和表达式

C#入门经典_札记 Chapter 3: 3.1 C#的基本语法 1.无论代码中是否有空格.回车符或tab字符(这些字符统称为空白字符),C#编译器都不考虑这些字符. 3.2 变量 1.计算机中所有的数据都是相同的东西(一组0.1),但是变量有不同的内涵,成为类型.建立这个类型系统的原因是,不同类型的数据需要用不同的方法来处理.变量限定为不同的类型,可以避免混淆它们.例如,在处理,组成数字图片的0.1序列和组成声音的0.1序列,其处理方式是不同的. 2.可以使用的变量类型是无限多的,因为可以自己

第 3 章 变量和表达式

3.1  C# 的基本语法 注释://单行注释,/* ... */多行注释,///单行注释可用于创建文档说明书 C#语言是区分大小写字母的. 使用#region 和 #endregion 关键字来定义可以扩展和收缩的代码区域的开头和结尾. 以#开头的任意关键字实际上都是一个预处理指令,严格地说不是C#关键字. 3.2  变量 试试看:使用简单类型的变量 1 using System; 2 using System.Collections.Generic; 3 using System.Linq;

速战速决 (1) - PHP: 概述, 常量, 变量, 运算符, 表达式, 控制语句

[源码下载] 作者:webabcd 介绍速战速决 之 PHP 概述 常量 变量 运算符 表达式 控制语句 示例1.概述basic/summary.php <!-- PHP 概述 --> <?php echo "我在 php 开始标记和结束标记之间"; echo "<br />"; ?> <?php if (time() % 2 == 0): ?> 我是 html(用于演示 php 和 html 混编) <br /