Integration Services 变量
变量存储 SQL Server Integration Services 包及其容器、任务和事件处理程序在运行时可以使用的值。脚本任务和脚本组件中的脚本也可以使用变量。将任务和容器按顺序组织为工作流的优先约束在其约束定义包含表达式时可以使用变量。
可以将 Integration Services 包中的变量用于下列目的:
在运行时更新包元素的属性。例如,可以动态设置 Foreach 循环容器所允许的并发可执行文件数。
包含内存中的查找表。例如,包可以运行加载带数据值的变量的执行 SQL 任务。
加载带数据值的变量,然后使用这些变量指定 WHERE 子句中的搜索条件。例如,脚本任务中的脚本可以更新执行 SQL 任务中的 Transact-SQL 语句所使用的变量的值。
加载带整数的变量,然后使用该值控制包控制流中的循环。例如,可以在 For 循环容器的计算表达式中使用变量来控制迭代。
在运行时填充 Transact-SQL 语句的参数值。例如,包可以运行执行 SQL 任务,然后使用变量动态设置 Transact-SQL 语句中的参数。
生成包含变量值的表达式。例如,派生列转换可以用变量值乘以列值所得结果来填充列。
Integration Services 支持两种类型的变量:用户定义的变量和系统变量。用户定义变量由包开发人员定义,系统变量由 Integration Services 定义。可以创建包所需数量的用户定义变量,但不能另外创建系统变量。
在执行 SQL 任务用来在 SQL 语句中将变量映射到参数的参数绑定中,可以使用所有变量(系统和用户定义)。有关详细信息,请参阅SSIS 执行 SQL 任务和在执行 SQL 任务中使用参数和返回代码。
注意 |
---|
用户定义变量和系统变量的名称是区分大小写的。 |
可以为所有 Integration Services 容器类型创建用户定义的变量,这些容器类型包括包、Foreach 循环容器、For 循环容器、序列容器、任务以及事件处理程序。用户定义变量是容器中 Variables 集合的成员。
使用 SSIS 设计器创建包时,SSIS 设计器**“包资源管理器”选项卡上的“变量”**文件夹中可以看到 Variables 集合的成员。这些文件夹列出了用户定义变量和系统变量。
可以使用下列方式配置用户定义变量:
提供变量的名称和说明。
指定变量的命名空间。
指示变量是否在其值更改时引发事件。
指示变量是只读还是读/写。
使用表达式的计算结果设置变量值。
在包或包对象(如任务)的范围内创建变量。
指定变量的值和数据类型。
对系统变量唯一可配置的选项是指定变量在更改值时是否引发事件。
不同的容器类型有一组不同的系统变量可用。有关包及其元素所使用的系统变量的详细信息,请参阅系统变量。
有关变量的现实使用情况的详细信息,请参阅在包中使用变量。
命名空间
Integration Services 提供两个命名空间,User 和 System。默认情况下,自定义变量位于 User 命名空间中,系统变量位于 System 命名空间中。可以为用户定义变量创建其他命名空间,并可以更改 User 命名空间的名称,但不能更改 System 命名空间的名称,也不能向 System 命名空间添加变量或将系统变量分配到其他命名空间。
范围
变量在包的作用域内或者包中的容器、任务或事件处理程序的作用域内创建。因为包容器位于容器层次结构的顶部,所以包作用域内的变量所起作用类似于全局变量,而且这些变量可由包中所有容器使用。同样,在 For 循环容器等容器的范围内定义的变量可由 For 循环容器中所有任务或容器使用。
如果包使用执行包任务运行其他包,则可以使用父包变量配置类型,使在调用的包或执行包任务范围内定义的变量可供被调用的包使用。有关详细信息,请参阅SSIS 包配置。
值
用户定义变量的值可以是文字或表达式。变量包含设置变量值和值的数据类型的选项。这两种属性必须兼容:例如,字符串值不能与整数数据类型一起使用。
如果将变量配置为作为表达式进行计算,则必须提供表达式。在运行时计算表达式,而该变量将设置为计算结果。例如,如果变量使用表达式 DATEPART("month", GETDATE()) ,则变量的值与当前日期月份部分的数字相同。表达式必须是使用 SSIS 表达式语法的有效表达式。表达式和变量一起使用时,表达式可以使用文字以及表达式语法所提供的运算符和函数,但表达式不能引用包中数据流的列。表达式的最大长度为 4000 个字符。有关详细信息,请参阅 Integration Services 表达式参考。