【问题标题】:How to use coalesce in ssis如何在 ssis 中使用合并
【发布时间】:2015-09-12 09:34:27
【问题描述】:

我正在使用 MS SSIS 2008,我想在 DERIVED COLUMN 函数中执行 COALESCE 函数。

你能帮我写一下表达式吗?

【问题讨论】:

    标签: ssis coalesce


    【解决方案1】:

    我们没有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
    

    这很快就变得丑陋了,但概念保持不变 - 继续嵌套,直到匹配所有需要检查的级别。

    【讨论】:

    • 感谢您的提问和回答,对我也很有帮助!
    【解决方案2】:

    Coalesce 功能仅限于 TSQL。在 SSIS/SSRS 中,我们都没有 Coalesce 功能。因此,为了获得所需的输出,我们必须在 SSIS/SSRS 中使用 ISNULL 或 ISNOTHING 函数。在这种情况下,它将是嵌套的 ISNULL 函数。

    【讨论】:

    • 你能告诉我你为什么在这里投反对票吗?我给的建议有错吗?
    【解决方案3】:

    您可以使用派生列转换编辑器中的REPLACENULL( «expression», «expression» )。只需将您的列放在第一个表达式中,将默认值放在第二个表达式中。

    例如,REPLACENULL([some_internal_id], 0)

    【讨论】:

    • 请注意REPLACENULL()COALESCE() 不同,因为它只能检查一个列值,而COALESCE() 可以接受多个列作为输入。 REPLACENULL() 类似于ISNULL() SQL 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多