SSIS Преобразование символа в логическое значение / бит

У меня есть пакет SSIS для загрузки данных; как вы помните, есть флаги, которые находятся в файлах данных как Y / N char (1), когда я пытаюсь загрузить их как битовые флаги в SQL Server. Я указываю столбцы в файле данных как String [DT_STR], и у меня есть задача преобразования данных, чтобы преобразовать их в логические значения на основе следующего выражения (я получил ту же ошибку преобразования, просто указав их как DT_BOOL для начала, несмотря на то, что SSIS просил меня сказать какие значения следует рассматривать как логические):

[ColumnName] == "Y" ? (DT_BOOL)1 : (DT_BOOL)0

Запуск пакета дает ошибку и сообщает мне Invalid character value for cast specification и The value could not be converted because of a potential loss of data о фактическом импорте в SQL Server (через назначение OLE DB).

Что мне здесь не хватает, чтобы правильно конвертировать?


person Wayne Molina    schedule 16.02.2009    source источник
comment
Я пытался сделать что-то невероятно похожее на это, но я нигде не могу найти в преобразовании «Преобразование данных», где это сделать. Где вы это определяете?   -  person Steven Oxley    schedule 22.07.2010
comment
Кажется, я нашел это - на самом деле это преобразование "Производный столбец".   -  person Steven Oxley    schedule 22.07.2010


Ответы (3)


Попробуй это:

(DT_BOOL)([ColumnName] == "Y" ? 1 : 0)

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

person Cade Roux    schedule 17.02.2009

Мне удалось решить эту проблему, используя производный столбец и вместо замены столбцов char, создав новые столбцы с типом DT_BOOL, например:

[Recycled] == "Y" ? True : False
person Wayne Molina    schedule 17.02.2009
comment
Извините, я неправильно понял, вы не можете заменить какой-либо столбец в SSIS столбцом другого типа, вам всегда нужно добавлять новые столбцы. - person Cade Roux; 17.02.2009
comment
Хотя в задаче преобразования вы можете создать еще один столбец с тем же именем, но, по моему опыту, не все компоненты, находящиеся позже в конвейере, будут отображать полное имя как component.column, поэтому это раздражает и опасно. - person Cade Roux; 17.02.2009
comment
Верно - я выяснил это на собственном горьком опыте ;-) - person Wayne Molina; 17.02.2009

У меня была такая же проблема с

(DT_BOOL) ([ColumnName] == "Y"? 1: 0)

и я мог заставить его работать, только вынув часть «(DT_BOOL)» из выражения и поместив задачу преобразования его в логическое значение в часть «Тип данных», выбрав «Boolean [DT_BOOL]. Никаких проблем после тот.

person Community    schedule 04.06.2009