Что происходит неправильно с этим производным выражением служб SSIS

((DT_STR,20,1252)OccuranceRegion == "US" && ((DT_STR,20,1252)LegalEntity == "AECB" || (DT_STR,20,1252)LegalEntity == "FSB" || (DT_STR,20,1252)LegalEntity == "Both")) 
? DATEADD("day",30,CapCreationDt) : (ISNULL(MaxofRevSCIAndSCI) ? (DT_DATE)"1900-01-01" : MaxofRevSCIAndSCI)

Всякий раз, когда я ставлю условия, как

OccuranceRegion == "US" AND 
LegalEntity is null

Результат приходит как NULL, я также проверил значение для MaxofRevSCIAndSCI, его не null. Почему, она не идет в другую часть?

1 ответ

  1. Любая функция NULL (за исключением специализированных, «убивающих NULL» функций ISNULL и подобных) оценивается как NULL. Вы только сравниваете LegalEntity со строковыми константами. Эти выражения будут иметь значение NULL, если значение LegalEntity равно NULL. Необходимо заменить значения NULL в LegalEntity чем-то другим. Возможно производный столбец вверх по потоку

    ISNULL(LegalEntity) ? "##NULL#' : LegalEntity
    

    было бы проще, чем делать это в самом выражении (потому что выражения служб SSIS отвратительны для отладки).