У меня небольшая проблема с выражением SSIS, где в задаче потока данных преобразования производного столбца я пытаюсь захватить 6-символьную подстроку из строкового ввода, приведя значение производных столбцов к NULL, если оно не существует. Это код, который я использую, с добавлением разрывов строк и отступов для удобства чтения:
KeyValueLength == -2 ?
NULL(DT_STR,6,65001) :
(
KeyValueLength == -1 ?
(DT_STR,6,65001)RTRIM(SUBSTRING(StringInput,KeyValueStart,999)) :
(DT_STR,6,65001)SUBSTRING(StringInput,KeyValueStart,KeyValueLength)
)
(Для справки, когда KeyValueLength
равно -2
, значение ключа не найдено, когда оно -1
, то оно находится в конце StringInput
, любого другого числа и находится в середине StringInput
. Этот код работает для других ключевые значения, которые я получаю, которые преобразуются в DT_I4 и DT_DECIMAL)
По отдельности следующие три выражения не вызывают ошибки:
NULL(DT_STR,6,65001)
(DT_STR,6,65001)RTRIM(SUBSTRING(StringInput,KeyValueStart,999))
(DT_STR,6,65001)SUBSTRING(StringInput,KeyValueStart,KeyValueLength)
Но когда я объединяю это вложенное условие выше, я получаю следующую ошибку при попытке сохранить окно:
Для операндов условного оператора тип данных DT_STR поддерживается только для входных столбцов и операций приведения. Выражение KeyValueLength == -2? NULL (DT_STR, 6,65001): (KeyValueLength == -1? (DT_STR, 6,65001) RTRIM (SUBSTRING (StringInput, KeyValueStart, 999)): (DT_STR, 6,65001) SUBSTRING (StringInput, KeyValueStart, KeyValueLength) ) имеет операнд DT_STR, который не является входным столбцом или результатом преобразования, и его нельзя использовать с условной операцией. Чтобы выполнить эту операцию, операнд должен быть явно приведен с помощью оператора приведения.
У меня небольшие проблемы с тем, чтобы понять, в чем именно заключается проблема. Это сообщение об ошибке предполагает, что это связано с использованием условных выражений, но я не вижу проблемы.