【问题标题】:how can i use both ternary operator and isnull function in SSIS?如何在 SSIS 中同时使用三元运算符和 isnull 函数?
【发布时间】:2021-02-17 16:09:30
【问题描述】:

对于这张表,我在郊区和邮政编码中有两个空值。 如果郊区,我想将“IsValid”列更改为“N”,并且邮政编码为“Null”。否则“IsValid”为“Y”

这是我的表达方式:

LEN(LTRIM(RTRIM(School_Suburb))) == 0 || 
LEN(LTRIM(RTRIM(School_Postcode))) == 0 || 
ISNULL(School_Suburb) || 
ISNULL(School_Postcode) ? "N" : "Y"

这是错误信息。

所以只是想知道是否有人知道我写错了哪一部分?怎么改?

这是衍生栏目编辑页面的截图

【问题讨论】:

  • 您可以发布派生列配置的屏幕截图吗?错误消息提到了提供的表达式中不存在的IsValid,我想看看错误消息是否具有误导性,或者您的声明中是否有问题。
  • 是的,刚刚添加 :)

标签: ssis conditional-statements isnull


【解决方案1】:

如果您从表达式中删除 IsValid 并将其放在第一列,当前为“派生列 1”。

另一个变化是您需要将整个逻辑 OR 用括号括起来

(LEN(LTRIM(RTRIM(School_Suburb))) == 0 || LEN(LTRIM(RTRIM(School_Postcode))) == 0 || ISNULL(School_Suburb) || ISNULL(School_Postcode)) ? "N" : "Y"

表达式的一个很好的经验法则是,如果它不适合可见框,则它可能太长了。在这里,我将其拆分为三个新列,分别跨两个派生列组件。

在这里,我创建了两个新列 IsSuburbInvalidIsSchoolInvalid(尽管在屏幕截图中被错误标记为有效,而不是无效)

LEN(LTRIM(RTRIM(School_Suburb))) == 0 || ISNULL(School_Suburb)
LEN(LTRIM(RTRIM(School_Postcode))) == 0 || ISNULL(School_Postcode)

在下一个派生列(必须是一个单独的组件,因为它将使用我们刚刚创建的新列)中,我创建了IsValid,其逻辑更易于调试

IsSchoolInvalid || IsSuburbInvalid ? "N" : "Y"

【讨论】:

  • 是的,我错过了表达的情况。用括号括起来
  • 非常感谢!我想这是我弄错了的表达式或其他东西,它仍然显示相同的错误。我稍后会检查它。可能是我的电脑问题....
  • 它不应该是“在我的机器上工作”类型的情况。比较你拥有的和我拥有的。我能做的另一件事是,您的 IsValid 列的名称/类型可能存在冲突(可能存在于您的源代码中),因此将其称为 IsValidCalculated 之类的新鲜事物
猜你喜欢
  • 1970-01-01
  • 2021-09-30
  • 2020-04-30
  • 2019-07-30
  • 2012-10-14
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多