表达式是使用一些元素组合起来产生一个唯一的值。这些元素包括变量,字面值,函数,存储过程和运算符。一个简答的表达式是1<2,它的结果是true。虽然表达式是从C语言中衍生出来,但是他们大小写不明感。
SSIS中很多的任务都支持表达式。所有的任务都支持使用表达式来配置属性。例如For Loop和Foreach Loop中可以使用表达式来设置循环条件,Derived Column任务可以使用表达式来定义输出。
动态属性
SSIS中通过表达式可以动态的执行转换任务。
右击任务选择编辑,打开编辑界面。在左方有一些归类标签,点击这些标签可以打开一类相关的属性。每一种任务都会有一个表达式标签,如图1
图1
在这个编辑框中有两个列,一个是表达式名字,一个是表达式的值。在表达式名字中可以打开一个下拉列表,在这个表中选择要用的表达式,之后就可以在值这个列中编辑一个表达式值。在编辑表达式值的时候也可以点击右边的园形按钮打开表达式值编辑器。如图2
图2
点击右边栏中表达式旁边的加号可以查看所有的表达式。点击文本框旁边的圆形按钮可以打开表达式编辑框,如图3
图3
这个编辑器非常强大,左边框中的树形结构罗列出要编辑的表达式。在右边框中的树形结构罗列了所有可以使用的表达是函数和操作符。点击一个函数或者操作符的时候在下方Description栏中将会自动展示一些解释说明。也可以直接点击想要的表达式或者表达式函数到编辑框中而不是手动键入。
在表达式编辑器中设置表达式,注意表达式的值要和表达式相符,例如如果选择DelayValidation属性,那么表达式的结果一定要是一个布尔类型。设置好之后可以店家Evaluate Expression来验证,如果不符则会弹出错误提示。例如我们输入字母a则会得到如图4的错误提示。
图4
任务中的表达式
在任务中也可以使用表达式。最典型的就是Derived Column任务。下面我们看看在Derived Column中我们如何使用。新建一个包,在Control Flow中拖放一个Data Flow Task,双击进入Data Flow,在其中拖放一个OLE DB数据源,选择视图[HumanResources].[vEmployee]。在Columns标签中只选择FirstName,MiddleName,LastName三个列。
添加一个Derived Column任务,把它和数据源连接起来。双击Derived Column打开编辑器,可以看到如图5的界面,这个界面可表达式编辑器非常的相似。不同的地方在表达式边界框中,这里不是一个文本框,而是一个用来编辑输出列的可以编辑的表格。
图5
在第一列中输入FullName,在Derived Column列中选择<add as new column>,最后在Expression这一列中输入如下的表达式:
FirstName + ""+ MiddleName + ""+ LastName
这个表达式非常的简单,只是将所有名字连接起来作为一个完整的名字,中间是偶那个空格隔开。
点击OK保存,关闭表达式编辑界面。添加一个平面文件或者是Excel格式的数据目的,把他和Derived Column连接起来。最后运行这个包。这里我们选择使用Excel格式的数据目的。运行成功之后可以看到如图6的结果。
图6
我们会发现FullName这一列中有一些列是空的,这是因为有一些人没有MiddleName,使得表达式的值有误,这样的结果不是我们希望的。我们需要判断MiddleName的值。打开表达式编辑器重新编辑如下:
FirstName + (ISNULL(MiddleName)? " ": " "+ MiddleName + " ") + LastName
这里使用ISNULL函数判断然后使用问号表达式来处理MiddleName。
这个函数是从C语言演化而来的。三元表达式和VB中的IIF函数很相似。最后保存关闭编辑器。最后查看Excel文件,这次每一行都都有一个值,如图7
图7
新的表达式语言为SSIS提供了强大的功能,使用起来更加便捷。更加详细的介绍在SQL Server 2008联机丛书中可以找到。