SSIS ISNULL для пустой строки
поэтому в настоящее время я работаю над миграцией со старого сервера базы данных Advantage на SQL 2005 с помощью SSIS 2008. Одним из столбцов в старой базе данных Advantage является тип MEMO. По умолчанию это переводится в столбец DT_TEXT. Ну в новой базе данных мне не нужно это большое поле, но можно ограничить его чем-то вроде VARCHAR(50). Я успешно настроил преобразование производного столбца, чтобы преобразовать его со следующим выражением:
(DT_STR,50,1252)[ColumnName]
теперь я хочу сделать шаг далее и замените все значения NULL пустой строкой. Это казалось бы достаточно легко с помощью ISNULL([ColumnName])?"":(DT_STR,50,1252)[ColumnName]
выражение, но проблема в том, что назначение OLE DB содержит следующую ошибку
не удается преобразовать между строками unicode и не-unicode...
таким образом, по-видимому, все выражение ISNULL преобразует тип данных в строку Unicode [DT-WSTR]. Я пробовал различные слепки на всем выражении или разных частях, но я не могу получить тип данных соответствует тому, что мне нужно.
во-первых, можно ли преобразовать тип DT_TEXT непосредственно в unicode? Насколько я могу судить, гипс так не работает. Если нет, есть ли способ заставить выражение работать так, чтобы значения NULL преобразовывались в пустые строки?
Спасибо за вашу помощь!
2 ответов
попробуйте это в производном столбце.
(DT_STR,50,1252) (ISNULL(ColumnName) ? "" : (DT_STR,50,1252) ColumnName)
Он включает дополнительный тип cast с условным (?:) в скобках для обеспечения требуемой последовательности обработки. Я думаю, что ваше исходное выражение было неявно приведено к DT_WSTR, потому что "" по умолчанию DT_WSTR. С помощью этой новой версии принудительно приведение к DT_STR после вычисления выражения.
Я выяснил кое-что, что работает. Возможно, это не лучшее решение, но оно сработает в моей ситуации.
из моего источника OLE DB я сначала сделал производный столбец. Это я использовал ISNULL, который в конечном итоге преобразовал его в тип Юникода DT_WSTR. хотя я не смог получить никаких приведений, чтобы вернуть его к требуемому типу, я добавил преобразование преобразования данных между производным столбцом и назначением OLE DB. Это возьмет входную строку и преобразует ее обратно в a И dt_str. Все это немного раздражает преобразование так много раз, но столбец не содержит никакой фанковой информации, о которой мне нужно беспокоиться, поэтому я полагаю, что это сработает.
спасибо всем, кто задумался над решением, и если вы найдете какой-то удивительный способ решить эту проблему, мне было бы более чем интересно.