如何在 SSIS 派生列中的嵌套 if 条件表达式中使用 TRIM

Posted

技术标签:

【中文标题】如何在 SSIS 派生列中的嵌套 if 条件表达式中使用 TRIM【英文标题】:How to use TRIM in nested if conditional expression in SSIS derived column 【发布时间】:2014-03-07 17:55:10 【问题描述】:

我有一个包含两列的源表 - Sndr_Ref 和 Check_Num

我有一个包含一列的目标表 - Txn_Code (nvarchar(50),null)

这是我需要实现的逻辑-

    如果 Sndr_Ref = [某个值] 且 Check_Num = null,则加载 Txn_Code = 10 如果 Check_Num = [某个值] 且 Sndr_Ref = null,则加载 Txn_Code = 2 如果 Sndr_Ref 和 Check_Num = [某个值],则加载 Txn_Code = 10 如果 Sndr_Ref 和 Check_Num = Null,则加载 Txn_Code = Null

我在我的 SSIS 包中创建了一个派生列,并将其映射到 Txn_Code。这是我的派生列的表达式-

Sndr_Ref == "" ? (Check_Num == "" ? (DT_WSTR,50)NULL(DT_WSTR,50) : "2") : "10"

上面的表达式是在所有记录中插入 10。没有插入空值或 2。我检查了源表,目标列中应该有一些包含 10、2 和空值的记录。我刚刚发现我的源参考列(Sndr_Ref 和 Check_Num)有宽空间。您能否帮助我如何在上述逻辑中修剪这些宽空间并将值设置为 null 如果它们是空白的?

【问题讨论】:

为什么你不能在 Source 中应用同样的逻辑。那样可能会更干净。 【参考方案1】:

不确定您的源数据,但我想您可能还需要检查空值:

ISNULL(Sndr_Ref) || TRIM(Sndr_Ref) == "" ? (ISNULL(Check_Num) || TRIM(Check_Num) == "" ? (DT_WSTR,50)NULL(DT_WSTR,50) : "2") : "10"

【讨论】:

谢谢,我会使用它并在这里更新一下。我也可以在你的表达式中使用 TRIM 来确保我正在修剪宽空间吗? 是的,修剪也是个好主意。如果有帮助,请采纳答案。 我对其进行了编辑,现在在表达式中包含了 trim。

以上是关于如何在 SSIS 派生列中的嵌套 if 条件表达式中使用 TRIM的主要内容,如果未能解决你的问题,请参考以下文章

如果条件不满足,派生列表达式SSIS如何忽略表达式?

SSIS派生列问题

无法解析我的 SSIS 派生列表达式

为啥派生列组件的表达式不适用于 SSIS 中的空值?

SSIS如何通过分隔符获取字符串的一部分

SQL SSIS派生列公式/语法问题