标识符 (SSIS)

在表达式中,标识符是可供运算使用的列和变量。表达式可以使用常规标识符和限定标识符。常规标识符是不需要其他限定符的标识符。例如,MiddleNameAdventureWorks 数据库的 Contacts 表中的列)是常规标识符。限定标识符是由方括号分隔的标识符。标识符可能需要分隔符,因为标识符名称包括空格,或标识符名称不以字母或下划线字符开头。例如,列名 Middle Name 必须由方括号限定,在表达式中书写为 [Middle Name]。

包可能包括以相同的名称显示列的数据源。为了消除列歧义,表达式计算器支持点表示法,该表示法可以用其源名称来限定列名称。例如,如果源的名称是 GetGeographyData,并且列的名称是 GeographyKey,则可以使用 GetGeographyData.GeographyKey 来引用该列。

包可以拥有多个同名变量,只要它们属于不同的命名空间。表达式计算器提供了一个命名空间解析运算符,这样就可以依据命名空间来标识变量了。有关详细信息,请参阅语法 (SSIS)

常规标识符

常规标识符的命名必须遵循以下这些规则:

  • 按照 Unicode 标准 2.0 的规定,名称的第一个字符必须是字母,或者是下划线“_”。
  • 后面的字符可以是在 Unicode 标准 2.0 中定义的字母或数字、下划线“_”以及字符 @、$ 和 #。
ms140285.note(zh-cn,SQL.90).gif重要提示:
常规标识符中不能包含空格和特殊字符(上述特殊字符除外)。若要使用空格和特殊字符,必须使用限定标识符而不是常规标识符。

限定标识符

如果标识符的名称包含空格或名称不是有效的常规标识符名称,则必须对该标识符进行限定。表达式计算器使用左右方括号 ([]) 来限定标识符。方括号置于字符串的开头和末尾。例如,标识符 5$> 将变为 [5$>]。方括号可与列名、变量名和函数名一起使用。

如果使用 SSIS 设计器对话框生成表达式,则常规标识符将自动包含在方括号中。但是,只有当名称包括无效字符时,才需要括号。例如,名为 MiddleName 的列不带方括号也是有效的。

不能在表达式中引用包含方括号的列名。例如,不能在表达式中使用列名 Column[1]。若要在表达式中使用此列,必须将其重命名为不带方括号的名称。

沿袭标识符

表达式可以使用沿袭标识符来引用列。沿袭标识符是在首次创建包时自动分配的。可以在 SSIS 设计器中**“高级编辑器”对话框的“列属性”**选项卡上查看列的沿袭标识符。

如果使用列的沿袭标识符引用列,则标识符必须包含井号 (#) 字符前缀。例如,必须将沿袭标识符为 147 的列引用为 #147。

如果表达式分析成功,则表达式计算器会将沿袭标识符替换为对话框中的列名。

唯一列名

包中使用的多个组件可能以相同的名称显示列。如果在表达式中使用这些列,则必须消除它们的歧义后才能成功分析表达式。表达式计算器支持用点分表示法标识列的源。例如,两个名为 Age 的列可以成为 FlatFileSource.AgeOLEDBSource.Age,这表示它们的源分别是 FlatFileSource 和 OLEDBSource。分析器将完全限定名视为单个列名。

源组件名和列名是分别限定的。下列示例说明了点分表示法中方括号的有效用法:

  • 源组件名包含空格。

    [MySo urce].Age
    
  • 列名的第一个字符无效。

    MySource.[#Age]
    
  • 源组件名和列名包含无效字符。

    [MySource?].[#Age]
    
ms140285.note(zh-cn,SQL.90).gif重要提示:
如果点分表示法中的两个元素括在一对方括号中,则表达式计算器会将此元素对解释为单个标识符,而不是源-列组合。

表达式中的变量

变量在表达式中引用时必须包含 @ 前缀。例如,使用 @Counter 来引用 Counter 变量。@ 字符不是变量名的一部分,它仅为表达式计算器标识变量。如果使用 SSIS 设计器提供的对话框生成表达式,则 @ 字符将自动添加到变量名中。@ 字符和变量名间包含空格无效。

变量名和其他常规标识符遵循同样的规则:

  • 按照 Unicode 标准 2.0 的规定,名称的第一个字符必须是字母,或者是下划线“_”。
  • 后面的字符可以是在 Unicode 标准 2.0 中定义的字母或数字、下划线“_”以及字符 @、$ 和 #。

如果变量名中包含以上所列之外的字符,则必须将变量用方括号括起来。例如,带有空格的变量名必须括在方括号内。左括号紧随 @ 字符。例如,My Name 变量被引用为 @[My Name]。如果变量名和方括号间包含空格,则无效。

ms140285.note(zh-cn,SQL.90).gif注意:
用户定义变量和系统变量的名称区分大小写。

唯一变量名

Integration Services 支持自定义变量并提供一组系统变量。默认情况下,自定义变量属于 User 命名空间,而系统变量属于 System 命名空间。可以为自定义变量创建其他命名空间并更新命名空间名称来满足应用程序要求。表达式生成器列出了所有命名空间中的作用域内变量。

所有变量都有作用域并属于某个命名空间。变量的作用域可以是包或者包中的容器或任务。SSIS 设计器中的表达式生成器仅列出作用域内变量。有关详细信息,请参阅 Integration Services 变量在包中使用变量

表达式中使用的变量必须具有唯一的名称,表达式计算器才能正确地计算表达式。如果包使用多个同名变量,则它们的命名空间必须不同。Integration Services 提供了命名空间解析运算符,该运算符由两个冒号组成 (::),用于以命名空间限定变量。例如,下面的表达式使用两个名为 Count 的变量;一个属于 User 命名空间,一个属于 MyNamespace 命名空间。

@[User::Count] > @[MyNamespace::Count]
ms140285.note(zh-cn,SQL.90).gif重要提示:
必须将命名空间与限定的变量名二者的组合放在方括号中,表达式计算器才能识别该变量。

如果在 User 命名空间中 Count 的值是 10,而在 MyNamespaceCount 的值是 2,则表达式的计算结果是 true,因为表达式计算器将它们识别为两个不同的变量。

如果变量名不唯一,将不会发生错误。相反,表达式计算器将仅使用变量的一个实例来计算表达式并返回错误的结果。例如,以下表达式原来是为了比较两个单独 Count 变量的值(10 和 2),但表达式的计算结果却是 false,因为表达式计算器两次都使用了同一个 Count 变量实例。

@Count > @Count

请参阅

其他资源

Integration Services 表达式概念

帮助和信息

获取 SQL Server 2005 帮助