尝试了解以下条件分割表达式尝试执行的操作:
ISNULL(Employee_ID_WD)|| (右(REPLACENULL(Employee_ID_WD,“0”),LEN(REPLACENULL(Employee_ID,“0”)))!= REPLACENULL(Employee_ID,“0”))
我是SSIS的新手,有人可以解释一下吗?
答案 0 :(得分:2)
当你把它分解时,这是一个相对直接的表达。
简洁地说(tl; dr),如果Employee_ID_WD
为空或Employee_ID
值不在Employee_ID_WD
值中,则返回true
。否则,请返回false
。
详细说明:
第一部分ISNULL(Employee_ID_WD)
检查Employee_ID_WD
是否为空。如果是,表达式将立即返回true。原因就在于||
之后。这被称为逻辑或。如果您在许多编程中看到这一点,则表明程序员希望表达式在||
之前的任何部分为真时立即返回。换句话说,如果||
之前的某些事情是真的,那就开始做我需要你做的事情,检查这个表达式中的任何内容是没有意义的,我知道我需要知道什么才能继续前进。这被称为短路评估。 Wiki
如果Employee_ID_WD
不为null,我们将继续执行表达式的下一部分。
这部分:
(RIGHT(REPLACENULL(Employee_ID_WD,"0"),LEN(REPLACENULL(Employee_ID,"0")))
抓住Employee_ID_WD
右侧的字符。它要求的字符数是从LEN
上运行的Employee_ID
(长度)函数返回的字符数。此外,这两部分都在检查它们传入的值是否为空,如REPLACENULL
函数所示。如果它们为null,则返回值为0的字符串。如果其中一个值为null,则执行此操作,这样您就可以获得真正的值比较。在此表达式的所有部分中使用REPLACENULL
函数可以使其更加健壮,这意味着可以处理与数据的不一致而不会出现错误,或者最终给出一致的结果。
将上述部分的结果与REPLACENULL(Employee_ID,"0")
进行比较。如果上面的部分与此不相等(!=
不等于),则表达式返回true。