【发布时间】:2015-09-12 09:34:27
【问题描述】:
我正在使用 MS SSIS 2008,我想在 DERIVED COLUMN 函数中执行 COALESCE 函数。
你能帮我写一下表达式吗?
【问题讨论】:
我正在使用 MS SSIS 2008,我想在 DERIVED COLUMN 函数中执行 COALESCE 函数。
你能帮我写一下表达式吗?
【问题讨论】:
我们没有coalesce 函数。我们的表达式语言中的ISNULL与同名的TSQL函数有很大的不同。
SSIS 表达式语言的 ISNULL 计算一个操作数,如果它是空值则返回 true,否则返回 false。
相反,要执行类似合并的操作,我们需要使用 ISNULL 运算符和三元函数 ?: 将其读取为 Test : True condition : False condition。假设 MyColumn 是 unicode 字符串类型,这将确定 MyColumn 是否为假。如果是,它将对字符串 Secondary Condition 进行硬编码。否则,它将返回 MyColumn 的值。这相当于 tsql 的 `coalesce(MyColumn, 'Secondary Condition')
ISNULL(MyColumn) ? "Secondary Condition" : MyColumn
Coalesce 允许多个搜索条件,因此像 coalesce(Column0, Column1, Column2) 这样的东西会将三元运算符嵌套在一起
ISNULL(Column0) ? (ISNULL(Column1) ? Column2: Column1) : Column0
这很快就变得丑陋了,但概念保持不变 - 继续嵌套,直到匹配所有需要检查的级别。
【讨论】:
Coalesce 功能仅限于 TSQL。在 SSIS/SSRS 中,我们都没有 Coalesce 功能。因此,为了获得所需的输出,我们必须在 SSIS/SSRS 中使用 ISNULL 或 ISNOTHING 函数。在这种情况下,它将是嵌套的 ISNULL 函数。
【讨论】:
您可以使用派生列转换编辑器中的REPLACENULL( «expression», «expression» )。只需将您的列放在第一个表达式中,将默认值放在第二个表达式中。
例如,REPLACENULL([some_internal_id], 0)
【讨论】:
REPLACENULL() 与COALESCE() 不同,因为它只能检查一个列值,而COALESCE() 可以接受多个列作为输入。 REPLACENULL() 类似于ISNULL() SQL 函数。