2016-06-22 3 views
3

Я пытаюсь преобразовать битовое поле из источника DB в целое значение в хранилище данных в проекте SSIS (SQL Server 2012)Преобразование немного к междунар возвращает отрицательное значение

Select cast([MyField] as int) as TheField from MyTable 

Для почему-то это возвращает 0 и -1, в отличие от +1, которую я ожидаю. Даже

Select abs(cast([MyField] as int)) as TheField from MyTable 

даст -1 в таблице назначения. Оператор SELECT работает как в превью, так и в SSMS, и я вижу желаемые 0 и 1. Однако фактическая задача передачи данных в пакете SSIS не работает должным образом. Я попробовал задачу преобразования данных и прямое письмо в таблицу без задачи.

Я действительно не хочу использовать дополнительный оператор обновления для умножения значений int с -1.

Как это может быть немного запутанным, вот исходная таблица:

CREATE TABLE [dbo].[empl](
[Name] [nvarchar](100) NULL, 
[active] [bit] NULL 
) ON [PRIMARY] 

GO 

Вот скриншот таблицы:

enter image description here

И скриншот задачи передачи данных :

enter image description here

В таблице назначения в результате передачи данных и преобразование:

enter image description here

ответ

3

очень интересно, если вы поставите просмотр данных вы увидите, что вниз по течению, MyField либо TRUE, либо FALSE, так что вы можете сделать, это добавить «производный столбец» компонент, чтобы создать новый столбец с выражением:

MyField == TRUE ? 1 : 0

затем сопоставить этот новый столбец назначения

+0

бы это будет быстрее, чем последующее поле таблицы обновления SQL Statement set field = field * (-1)? Единственные значения у меня равны 0 и -1. –

+0

Я удалил свой ответ. Это лучшее решение. – BIDeveloper

+0

разница в производительности будет незначительной, единственное преимущество этого решения - быть немного (без каламбура :), поскольку действует как преобразование данных из TRUE/FALSE, которые являются фактическими значениями, которые всегда будут в конвейере, независимо от того, оригинальное значение в myField – Jayvee

Смежные вопросы