Ответ 1
Мне удалось решить его, используя производный столбец и вместо замены столбцов char, создав новые столбцы, заданные для типа DT_BOOL
следующим образом:
[Recycled] == "Y" ? True : False
У меня есть пакет SSIS для загрузки данных; как вы помните, есть флагов, которые находятся в файлах данных как Y/N char (1), когда я пытаюсь загрузить их как битовые флаги в SQL Server. Я указываю столбцы в файле данных как String [DT_STR]
, и у меня есть задача преобразования данных, чтобы преобразовать их в booleans на основе следующего выражения (я получил ту же ошибку преобразования, которая просто указала их как 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).
Что мне здесь не хватает, чтобы заставить его правильно конвертировать?
Мне удалось решить его, используя производный столбец и вместо замены столбцов char, создав новые столбцы, заданные для типа DT_BOOL
следующим образом:
[Recycled] == "Y" ? True : False
Попробуйте следующее:
(DT_BOOL)([ColumnName] == "Y" ? 1 : 0)
Это также имеет преимущество автоматического правильного выбора типа данных производного столбца.
У меня была та же проблема с
(DT_BOOL) ([ColumnName] == "Y"? 1: 0)
и я мог только заставить его работать, выведя часть "(DT_BOOL)" из выражения и поставив задачу преобразования его в логическое на части "Тип данных", выбрав "Boolean [DT_BOOL]". После этого проблем нет.