SSIS ISNULL для пустой строки - PullRequest
6 голосов
/ 14 января 2011

Так что в настоящее время я работаю над миграцией со старого сервера базы данных 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 непосредственно в Юникод?Из того, что я могу сказать, слепки не работают таким образом.Если нет, есть ли способ заставить выражение работать так, чтобы значения NULL преобразовывались в пустые строки?

Спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 14 января 2011

Попробуйте в своем производном столбце.

(DT_STR,50,1252) (ISNULL(ColumnName) ? "" : (DT_STR,50,1252) ColumnName)

Включает дополнительный тип приведения с условным (? :) в скобках для обеспечения желаемой последовательности обработки. Я думаю, что ваше оригинальное выражение было неявно приведено к DT_WSTR, потому что "" по умолчанию - DT_WSTR. В этой новой версии вы приводите приведение к DT_STR после вычисления выражения.

0 голосов
/ 14 января 2011

Я понял что-то, что работает.Возможно, это не лучшее решение, но оно подойдет для моей ситуации.

Из моего источника OLE DB я сначала создал производную колонку.Для этого я использовал ISNULL, который в итоге преобразовал его в тип Unicode DT_WSTR.хотя я не мог получить приведения, чтобы вернуть его к требуемому типу, я затем добавил преобразование преобразования данных между производным столбцом и назначением OLE DB.Это взяло бы входную строку и преобразовало бы ее обратно в DT_STR.Все это немного раздражает при конвертации, но столбец не содержит какой-либо забавной информации, о которой мне следует беспокоиться, поэтому я полагаю, что это сработает.

Спасибо всем, кто обдумал решение,и если вы найдете какой-нибудь отличный способ справиться с этим, я буду более чем заинтересован.

...