Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Wayne MolinaОтветов: 3

У меня есть пакет 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).

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

  • Я пытался сделать что-то невероятно похожее на это, но я нигде не могу найти в преобразовании "Преобразование данных", где это сделать. Где вы это определяете? Steven Oxley 22.07.2010
  • Кажется, я нашел это - на самом деле это преобразование "Производный столбец". Steven Oxley 22.07.2010

sql-serverssis

Ответы

Ответ 1 · рейтинг 19 · Cade Roux

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

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

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

Ответ 2 · рейтинг 12 · Wayne Molina

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

[Recycled] == "Y" ? True : False

Ответ 3 · Community

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы