Существует ли ограничение уровней вложенности для выражений, используемых в пакетах служб SSIS? - PullRequest
0 голосов
/ 14 февраля 2012

Работа в SQL Server 2008. Мой первый удар по сценарию SSIS, и мне нужно эмулировать некоторую условную логику if / then, написанную на VB.net. Я не смог найти ни одного предыдущего вопроса, касающегося вложенных условий в выражениях, и считаю, что следую тому, что мне удалось обнаружить через google, для вложенных условий в производном столбце.

Я получаю сообщение об ошибке при попытке использовать вложенные условия в редакторе преобразования производных столбцов. Ошибка, которую я получаю, указывает, что SSIS не смог разобрать мое выражение. Фактическое исключение: «Исключение из HRESULT: 0xC0204006 (Microsoft.SqlServer.DTSPipelineWrap)»

Вопросы, ответы на которые могут сразу же ответить на мой вопрос (и создать новую проблему):

  • есть ли предел уровней вложенности?
  • может ли быть выполнено вложение в части condition1 [expression]? [условие1]: [условие2]

Я дам два фрагмента, первый - то, что я вставляю, второй - более удобную для читателя версию. Надеюсь, кто-то может указать на мою ошибку.

Не уверен, что он имеет направление, но учтите, что [BusArea] - это столбец, полученный на предыдущем шаге.

фактическое выражение:

[BusArea] == "CCC" || [BusArea] == "NBU" || [BusArea] == "CA" ? (ISNULL([CASE_MORG]) or TRIM([CASE_MORG]) == "" ? ( ISNULL([TRX_MORG]) or TRIM([TRX_MORG]) == "" ? NULL(DT_WSTR,50) : [TRX_MORG]) : [CASE_MORG]) : (ISNULL([CASE_AGT]) or TRIM([CASE_AGT]) == "" ? ( ISNULL([TRX_AGT]) or TRIM([TRX_AGT]) == "" ? NULL(DT_WSTR,50) : [TRX_AGT]) : [CASE_AGT])

отформатирован для удобства чтения:

[BusArea] == "CCC" || [BusArea] == "NBU" || [BusArea] == "CA" ? 
    (ISNULL([CASE_MORG]) or TRIM([CASE_MORG]) == "" ?
        ( ISNULL([TRX_MORG]) or TRIM([TRX_MORG]) == "" ?
            NULL(DT_WSTR,50)
            : [TRX_MORG]
        )
        : [CASE_MORG]
    )
    : (ISNULL([CASE_AGT]) or TRIM([CASE_AGT]) == "" ?
        ( ISNULL([TRX_AGT]) or TRIM([TRX_AGT]) == "" ?
            NULL(DT_WSTR,50)
            : [TRX_AGT]
        )
        : [CASE_AGT]
    )

1 Ответ

1 голос
/ 17 апреля 2012

Я не думаю, что есть какие-либо ограничения в условиях вложенности.Даже если он есть, я не думаю, что мы достигнем предела в пакетах, которые мы создаем, для управления нашими бизнес-процессами.

Вы почти все поняли правильно.Проблема с вашим условным заявлением заключается в том, что вы использовали or вместо ||

Я скопировал ваше точное заявление и вставил в Derived Transformation вData Flow task и получил ошибку, поскольку пакет не смог разобрать выражение.Я заменил все or's на правильный Логический оператор ИЛИ (||), и выражение вычислено правильно.

Issue with conditional statement

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...