Вложенный IF ELSE в производном столбце - PullRequest
3 голосов
/ 19 февраля 2020

У меня есть следующие логики c для сохранения даты в BI_StartDate, как показано ниже:

  • Если UpdatedDate не равно нулю, то BI_StartDate=UpddatedDate
  • ELSE BI_StartDate принимает значение EntryDate, если EntryDate равно нулю, то BI_StartDate=CreatedDate
  • Если CreatedDate IS NULL, то BI_StartDate=GetDATE()

Я использую производный столбец как см. ниже:

ISNULL(UpdatedDateODS)  ? EntryDateODS : (ISNULL(EntryDateODS) ? CreatedDateODS :
(ISNULL(CreatedDateODS) ? GETDATE()  ))

Я получаю эту ошибку:

Выражение «ISNULL (updatedDateODS)? EntryDateODS: (ISNULL (EntryDateODS)? CreatedDateODS: (ISNULL (CreatedDateODS) ? GETDATE ())) "on" Производный столбец. Выходные данные [Выходные данные производного столбца]. Колонки [Производный столбец 1] "недопустимы.

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Вы ищете первое ненулевое значение, которое является объединением, которого нет в потоке данных служб SSIS (производный столбец).

Я бы предложил очень простой компонент скрипта:

Row.BIStartDate = Row.UpdateDate ?? Row.EntryDate ?? Row.CreatedDate ?? DateTime.Now;

Это экран ввода столбцов:

enter image description here

Это входы и выходы:

enter image description here

И затем вы добавляете вышеупомянутый код в раздел Обработка строк:

public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        /*
         * Add your code here
         */

        Row.BIStartDate = Row.UpdateDate ?? Row.EntryDate ?? Row.CreatedDate ?? DateTime.Now;
}
1 голос
/ 20 февраля 2020

С точки зрения синтаксиса , вложенное условие if-else записано неправильно, поскольку необходимо убедиться, что все возможные выходные данные должны иметь одинаковый тип данных, также вы не упомянули последние " else "условие:

ISNULL(UpdatedDateODS)  ? EntryDateODS : (ISNULL(EntryDateODS) ? CreatedDateODS :
(ISNULL(CreatedDateODS) ? GETDATE() : **<missing>** ))

С логическая перспектива , выражение может вызвать исключение, так как вы используете столбец EntryDateODS, если ISNULL(UpdatedDateODS) истинно, тогда как вы должны проверить, EntryDateODS не является нулевым, прежде чем использовать его, я предлагаю следующее выражение:

ISNULL(UpdatedDateODS)  ? UpdatedDateODS : (ISNULL(EntryDateODS) ? EntryDateODS :
(ISNULL(CreatedDateODS) ? CreatedDateODS : GETDATE()  ))

Как упоминалось выше, если UpdatedDateODS, EntryDateODS, CreatedDateODS и GETDATE() Не используйте тот же тип данных , тогда вы должны привести к унифицированному типу данных, например:

ISNULL(UpdatedDateODS)  ? (DT_DATE)UpdatedDateODS : (ISNULL(EntryDateODS) ? (DT_DATE)EntryDateODS :
(ISNULL(CreatedDateODS) ? (DT_DATE)CreatedDateODS : (DT_DATE)GETDATE()  ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...