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

Posted PowerCoder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSIS变量属性中EvaluateAsExpression设置的作用相关的知识,希望对你有一定的参考价值。

我们在做SqlServer SSIS包开发的时候,经常会用到SSIS的变量,我们可以使用和修改SSIS变量的值使得SSIS包的逻辑更灵活,如下图所示:

技术分享

 

在定义SSIS变量的时候可以使用固定值(如上图中的变量Number),也可以是使用表达式(如上图中的变量Sql),使用表达式的时候可以让变量去使用另一个变量的值,比如下图是变量Sql的表达式,其中就使用了变量Number的值:

技术分享

 

顺便说一下,本文上面的截图都是基于SqlServer2012的SSIS包,也就是VisualStudio 2010的SSIS包,其实也VisualStudio 2008的SSIS包的变量也可以使用表达式,不过VisualStudio 2008需要打开VisualStudio的属性窗口后才能定义SSIS变量的表达式,如下图所示先在SSIS变量窗口选中要使用表达式的变量(变量MID_MonthsOver_SQL)

技术分享

然后从视图(View)下拉菜单中选中属性窗口(Properties Window)

技术分享

然后在属性窗口中就可以像在VisualStudio 2010中一样编辑变量的表达式(Expression)了

技术分享

 

不管是在VisualStudio 2010还是VisualStudio 2008的SSIS变量上,都有一个设置叫EvaluateAsExpression,这个设置可以在变量的属性窗口(Properties Window)中可以看到(怎么打开变量的属性窗口上面已经说了),如下图所示:

技术分享

默认情况下SSIS变量的EvaluateAsExpression是为False的,但是一旦你为SSIS变量使用了表达式(Expression),这个设置就会被自动改变为True,当然你也可以手动改回False,那么EvaluateAsExpression为True和False的时候有什么不同呢?

实际上EvaluateAsExpression设个设置只有在SSIS变量使用表达式(Expression)的时候才会起作用,它的作用是在获取变量值的时候是否动态计算变量的表达式。

 

举例说明,下图中我们设置了一个String类型的SSIS变量Sql,它的值依赖于Int32类型的变量Number,Number的初始值为0

技术分享

技术分享

然后我们在SSIS包的控制流中定义了三个Sequence Container(Sequence Container,Sequence Container 1,Sequence Container 2),每一个Sequence Container都会使得变量Number的值先加1,然后输出变量Sql的值

技术分享

如果变量Sql的EvaluateAsExpression为True,三个Sequence Container的输出结果为下面所示:

技术分享

技术分享

技术分享

 

但是如果变量Sql的EvaluateAsExpression为False,我们运行SSIS包会得到下面三个输出结果:

技术分享

技术分享

技术分享

 

这说明当变量Sql的EvaluateAsExpression为True时,每当在SSIS包中获取变量Sql的值时都会动态地去计算它的表达式(Expression),用表达式的最新结果作为变量Sql的值。而当变量Sql的EvaluateAsExpression为False时,其表达式只会为变量Sql提供一个初始值,在SSIS包中获取变量Sql的值时每次都返回的是这个初始值,而不会重新去计算变量Sql的表达式。

 

以上是关于SSIS变量属性中EvaluateAsExpression设置的作用的主要内容,如果未能解决你的问题,请参考以下文章

SSIS文件系统任务错误:分配给变量...的值的类型与当前变量类型不同

SSIS - 11.For循环容器

SSIS 中的 Azure Blob 目标 - Blob 名称作为表达式

如何将 DT_R8 存储在 SSIS 中的变量中

在 SSIS 的脚本任务中使用变量

如何在 ssis 包中的变量中获取当前周星期一的日期