Работа в 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]
)