2016-06-25 52 views
0

试图了解以下条件拆分表达式试图做:条件性拆分解释

ISNULL(Employee_ID_WD)|| (RIGHT(REPLACENULL(Employee_ID_WD,“0”),LEN(REPLACENULL(Employee_ID,“0”)))!= REPLACENULL(Employee_ID,“0”))

我是SSIS的新手,任何人都可以解释这一点吗?

回答

2

这是一个相对直接的表达,当你分解它。

说得简洁(TL; DR),如果Employee_ID_WD为空或Employee_ID值不在Employee_ID_WD值,然后返回true。否则,返回false

详情:

第一部分,ISNULL(Employee_ID_WD),检查,看看Employee_ID_WD为null。如果是,表达式将立即返回true。之后的原因是||。这被称为逻辑或。如果你在许多编程中看到这一点,它表明程序员想要表达式立即返回,如果它的任何部分在||之前为真。换句话说,如果||之前的某些事情是真的,那就开始做我需要你做的事,检查这个表达式中的任何内容都没有意义,我知道我需要知道什么才能继续前进。这被称为短路评估。 Wiki。如果Employee_ID_WD不为空,我们转到表达式的下一部分。

这部分:

(RIGHT(REPLACENULL(Employee_ID_WD,"0"),LEN(REPLACENULL(Employee_ID,"0"))) 

被抓取在Employee_ID_WD右侧的字符。它要求的字符数是从Employee_ID上运行的LEN(长度)函数返回的结果。另外,这两个部分都检查它们传入的值是否为空,如REPLACENULL函数所示。如果它们为null,则返回值为0的字符串。这是为了防止其中一个值为空,这样您可以获得真正的值比较。在这个表达式的所有部分使用REPLACENULL函数使得它更加健壮,这意味着与数据的不一致将被处理,而不会发生错误,或者最终得到一致的结果。

将上述部分的结果与REPLACENULL(Employee_ID,"0")进行比较。如果上面的部分与此不相等(!=不等于),则表达式返回true。

SSIS Expression Reference

+0

谢谢你的详细答案。这个答案提供了我所寻求的清晰度。 – Sharktooth