2012-09-19 44 views
4

我需要检测或者两个值是否为空,如果没有,他们是否不同。SSIS的条件性拆分NULL

我在分裂的条件是

(ISNULL(ModuleLevelId) && !ISNULL(LEV_CODE)) || 
(!ISNULL(ModuleLevelId) && ISNULL(LEV_CODE)) || (ISNULL(LEV_CODE) ? 0 - ModuleLevelId : (DT_I4)LEV_CODE) != ModuleLevelId 

,但有人告诉我,我的表达导致空,即非布尔条件。

谁能帮我写,将工作,请的条件?

非常感谢

帕特里克

+0

我已经分手这个条件并取得了第一个测试的其中任何一列空校验。 随后的条件然后执行转换和比较,并且我仍然收到消息'Source:Module Check for changes [3192] 描述:“输出”LevelId上的表达式“ModuleLevelId!=(DT_I4)LEV_CODE”changed( 5356)“评估为NULL,但”组件“检查更改”(3192)“需要布尔结果。 – Patrick

+0

如果两个值都不为空,那么你可以尝试做什么? 'LEV_CODE - ModuleLevelId'? 如果其中一个值为空,您需要返回什么? – Justin

+0

嗨@justin,谢谢你的回复。本质上,我试图检测两个值之间是否有变化,这将决定一些后续更新。问题是NULL值保持打破了比较 – Patrick

回答

4
(ISNULL(ModuleLevelId) && !ISNULL(LEV_CODE)) || 
(!ISNULL(ModuleLevelId) && ISNULL(LEV_CODE)) || 
((ISNULL(LEV_CODE) ? 0 - ModuleLevelId :(DT_I4)LEV_CODE) != ModuleLevelId) 

我认为你需要围绕你的第三项:

(ISNULL(LEV_CODE) ? 0 - ModuleLevelId :(DT_I4)LEV_CODE) != ModuleLevelId 

有()。我想表达的引擎正确分析它作为

((ISNULL(ModuleLevelId) && !ISNULL(LEV_CODE)) || 
(!ISNULL(ModuleLevelId) && ISNULL(LEV_CODE)) || 
(ISNULL(LEV_CODE) ? 0 - ModuleLevelId :(DT_I4)LEV_CODE)) != ModuleLevelId 

或(布尔||布尔|| INT)!= INT

当你想要的是 (布尔||布尔||布尔)

尝试此答案中最顶端的代码。

+0

Hi @William。 非常感谢这一点,它完美的工作。 Patrick – Patrick